找回密码
 立即注册
首页 业界区 业界 ArkUI-X平台差异化

ArkUI-X平台差异化

喜及眩 2025-6-11 18:29:04
跨平台使用场景是一套ArkTS代码运行在多个终端设备上,如Android、iOS、OpenHarmony(含基于OpenHarmony发行的商业版,如HarmonyOS Next)。当不同平台业务逻辑不同,或使用了不支持跨平台的API,就需要根据平台不同进行一定代码差异化适配。当前仅支持在代码运行态进行差异化,接下来详细介绍场景及如何差异化适配。
使用场景

平台差异化适用于以下两种典型场景:
1.自身业务逻辑不同平台本来就有差异;
2.在OpenHarmony上调用了不支持跨平台的API,这就需要在OpenHarmony上仍然调用对应API,其他平台通过Bridge桥接机制进行差异化处理;
判断平台类型

可以通过let osName: string = deviceInfo.osFullName;获取对应OS名字,该接口已支持跨平台,不同平台上其返回值如下:
OpenHarmony上,osName等于OpenHarmony-XXX
Android上,osName等于Android XXX
iOS上,osName等于iOS XXX
示例如下:
  1. test() {
  2.   let osName: string = deviceInfo.osFullName;
  3.   console.log('osName = ' + osName);
  4.   if (osName.startsWith('OpenHarmony')) {
  5.     // OpenHarmony应用平台上业务逻辑
  6.   } else if (osName.startsWith('Android')) {
  7.     // Android应用平台上业务逻辑
  8.   } else if (osName.startsWith('iOS')) {
  9.     // iOS应用平台上业务逻辑
  10.   }
  11. }
复制代码
非跨平台API处理

在跨平台工程中如果调用非跨平台API,编译时IDE会触发拦截并报错。接下来以调用wifiManager.isWifiActive()判断WiFi开关是否打开为例,这个API当前是不支持跨平台的。示例代码:
  1.   test2(){
  2.    let isActive = wifiManager.isWifiActive();
  3.   }
复制代码
IDE报错:
  1. > hvigor ERROR: Failed :feature:default@CompileArkTS...
  2. > hvigor ERROR: ArkTS Compiler Error
  3. ERROR: ArkTS:ERROR File: D:/work/git/play-arkuix/Test_ACE/feature/src/main/ets/pages/Index.ets:64:31
  4. 'isWifiActive' can't support crossplatform application.
  5. COMPILE RESULT:FAIL {ERROR:2}
  6. > hvigor ERROR: BUILD FAILED in 10 s 753 ms
复制代码
此时可以将涉及到的API写到一个后缀为.ts文件,然后在不支持的API上面增加// @ts-ignore或// @ts-nocheck屏蔽告警,开发者需要保证只在OpenHarmony应用平台上才运行这一段逻辑,Android和iOS应用平台上可以借用Bridge桥接机制处理,示例代码如下:
1.新建一个WiFiUtil.ts,并忽略告警:
  1. import wifiManager from '@ohos.wifiManager'
  2. export class WiFiUtil {
  3.   static isActive(): boolean {
  4.     //@ts-ignore
  5.     return wifiManager.isWifiActive();
  6.   }
  7. }
复制代码
2.根据不同平台差异化逻辑,Android和iOS应用平台上通过Bridge机制桥接到对应平台的业务逻辑实现上:
  1. checkTestWiFi(): void {
  2.   let osName: string = deviceInfo.osFullName;
  3.   console.log('osName = ' + osName);
  4.   if (osName.startsWith('OpenHarmony')) {
  5.     // OpenHarmony应用平台
  6.     let isActive = WiFiUtil.isActive();
  7.     this.message = isActive ? '已连接' : '未连接';
  8.   } else {
  9.     // Android和iOS应用平台上,中转到原生
  10.     let bridge = Bridge.createBridge('Bridge');
  11.     bridge.callMethod('isWiFiActive').then((res) => {
  12.       // 业务逻辑处理...
  13.     }).catch(() => {
  14.     })
  15.   }
  16. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册