当前位置: 首页 > news >正文

ArkUI-X平台差异化

跨平台使用场景是一套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

示例如下:

test() {let osName: string = deviceInfo.osFullName;console.log('osName = ' + osName);if (osName.startsWith('OpenHarmony')) {// OpenHarmony应用平台上业务逻辑} else if (osName.startsWith('Android')) {// Android应用平台上业务逻辑} else if (osName.startsWith('iOS')) {// iOS应用平台上业务逻辑}
}

非跨平台API处理

在跨平台工程中如果调用非跨平台API,编译时IDE会触发拦截并报错。接下来以调用wifiManager.isWifiActive()判断WiFi开关是否打开为例,这个API当前是不支持跨平台的。示例代码:

  test2(){let isActive = wifiManager.isWifiActive();}

IDE报错:

> hvigor ERROR: Failed :feature:default@CompileArkTS... 
> hvigor ERROR: ArkTS Compiler Error
ERROR: ArkTS:ERROR File: D:/work/git/play-arkuix/Test_ACE/feature/src/main/ets/pages/Index.ets:64:31
'isWifiActive' can't support crossplatform application.COMPILE RESULT:FAIL {ERROR:2}
> hvigor ERROR: BUILD FAILED in 10 s 753 ms 

此时可以将涉及到的API写到一个后缀为**.ts**文件,然后在不支持的API上面增加// @ts-ignore或// @ts-nocheck屏蔽告警,开发者需要保证只在OpenHarmony应用平台上才运行这一段逻辑,Android和iOS应用平台上可以借用Bridge桥接机制处理,示例代码如下:

1.新建一个WiFiUtil.ts,并忽略告警:

import wifiManager from '@ohos.wifiManager'export class WiFiUtil {static isActive(): boolean {//@ts-ignorereturn wifiManager.isWifiActive();}
}

2.根据不同平台差异化逻辑,Android和iOS应用平台上通过Bridge机制桥接到对应平台的业务逻辑实现上:

checkTestWiFi(): void {let osName: string = deviceInfo.osFullName;console.log('osName = ' + osName);if (osName.startsWith('OpenHarmony')) {// OpenHarmony应用平台let isActive = WiFiUtil.isActive();this.message = isActive ? '已连接' : '未连接';} else {// Android和iOS应用平台上,中转到原生let bridge = Bridge.createBridge('Bridge');bridge.callMethod('isWiFiActive').then((res) => {// 业务逻辑处理...}).catch(() => {})}
}
http://www.xdnf.cn/news/973567.html

相关文章:

  • k8s使用自建nfs做持久化无法控制磁盘使用大小问题处理
  • gbase8s之message log rotate
  • 计算机网络面试汇总(完整版)
  • 【网络】每天掌握一个Linux命令 - iftop
  • 中和农信创新引领“三农“金融服务新模式
  • docker详细操作--未完待续
  • XSS攻击和CSRF攻击
  • TF-IDF算法详解与实践总结
  • 逆向--进阶
  • C++ 标准模板库(STL)详解文档
  • 关于前端常用的部分公共方法(三)
  • 【数字图像处理】基于Python语言的玉米小斑病图像分析
  • 鹰盾加密器“一机一码”技术全维度剖析:从底层实现到生态防护体系
  • 微信小程序抓包(burp + proxifier)
  • 卡方检验(χ²检验)
  • python打卡day50@浙大疏锦行
  • 1.1 ROS1应用商店APT源
  • 全国大学生计算机应用能力与数字素养大赛 C语言程序设计赛项——本科组练习
  • plc开篇学习。
  • maven依赖冲突解决
  • JAVA(Day_2)
  • 5g LDPC编译码-LDPC编码
  • Win系统下的Linux系统——WSL 使用手册
  • Docker安装openGauss
  • 使用kubeadm部署Kubernetes(k8s)集群的步骤
  • Linux ELF文件详解:深入理解可执行文件格式
  • 将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
  • Alpine Linux基本介绍与新手使用指南
  • Spring MVC 核心枢纽:DispatcherServlet 的深度解析与实践价值
  • FastAPI 教程:从入门到实践