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

鸿蒙ArkUI-X平台差异化:【运行态差异化(@ohos.deviceInfo)】

 平台差异化

简介

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

使用场景及能力

使用场景

平台差异化适用于以下两种典型场景:

  1. 自身业务逻辑不同平台本来就有差异;
  2. 在OpenHarmony上调用了不支持跨平台的API,这就需要在OpenHarmony上仍然调用对应API,其他平台通过Bridge桥接机制进行差异化处理;
  3. 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

判断平台类型

可以通过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();}
}

搜狗高速浏览器截图20240326151450.png

  1. 根据不同平台差异化逻辑,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(() => {})}
}

鸿蒙开发岗位需要掌握那些核心要领?

目前还有很多小伙伴不知道要学习哪些鸿蒙技术?不知道重点掌握哪些?为了避免学习时频繁踩坑,最终浪费大量时间的。

自己学习时必须要有一份实用的鸿蒙(Harmony NEXT)资料非常有必要。 这里我推荐,根据鸿蒙开发官网梳理与华为内部人员的分享总结出的开发文档。内容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

废话就不多说了,接下来好好看下这份资料。

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。鸿蒙OpenHarmony知识←前往。下面是鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

其中内容包含:

《鸿蒙开发基础》鸿蒙OpenHarmony知识←前往

  1. ArkTS语言
  2. 安装DevEco Studio
  3. 运用你的第一个ArkTS应用
  4. ArkUI声明式UI开发
  5. .……

《鸿蒙开发进阶》鸿蒙OpenHarmony知识←前往

  1. Stage模型入门
  2. 网络管理
  3. 数据管理
  4. 电话服务
  5. 分布式应用开发
  6. 通知与窗口管理
  7. 多媒体技术
  8. 安全技能
  9. 任务管理
  10. WebGL
  11. 国际化开发
  12. 应用测试
  13. DFX面向未来设计
  14. 鸿蒙系统移植和裁剪定制
  15. ……

《鸿蒙开发实战》鸿蒙OpenHarmony知识←前往

  1. ArkTS实践
  2. UIAbility应用
  3. 网络案例
  4. ……

最后

鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

http://www.lryc.cn/news/354158.html

相关文章:

  • 蓝牙Mesh模块组网时无线回程影响速率吗?
  • 将3D检测的box框投影到BEV图片上
  • Flutter 中的 ClipOval 小部件:全面指南
  • ubuntu 硬盘转移
  • three.js中使用CameraHelper来可视化调整阴影相机的范围
  • Golang发送GET请求并设置查询参数
  • c++笔记3
  • 唠唠叨叨,每日进度
  • Vulhub——CAS 4.1、AppWeb、apisix
  • Python Beautiful Soup 使用详解
  • Java进阶学习笔记29——Math、System、Runtime
  • TOTP 算法实现:双因素认证的基石(C/C++代码实现)
  • aws eks理解和使用podidentity为pod授权
  • 面向可复用性和可维护性的设计模式 课程学习总结
  • 修复谷歌 AdSense 的 Ads.Txt 无效的有收益损失风险提示
  • 使用向量叉乘,来计算一个点到一条线的距离
  • 学习笔记——交通安全分析02
  • pytest-sugar插件:对自动化测试用例加入进度条
  • AI大模型的口语练习APP
  • Elasticsearch 详细介绍和经典应用
  • GEC210编译环境搭建
  • Mysql中表之间的关系
  • 文心智能体大赛:百度文心智能体平台初体验
  • AI数据面临枯竭
  • 2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(中):订阅智能体OSS实现
  • LoadBalancer
  • 【栈】Leetcode 71. 简化路径【中等】
  • 简单操作一单利润500+,最新快手缺货赔付玩法,【找店教程+详细教程】
  • 【软件设计师】先导
  • npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称