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-ignore
return 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(() => {
})
}
}
ArkUI-X平台差异化的更多相关文章
- (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...
- 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
上一篇这里描写叙述了一个关于差异数据在开发过程中的一个长处,这里来演示另外一个特点:单机开发之无缝切换到C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服 ...
- 推动FPGA发展箭在弦上,国内厂商须走差异化之路
7月25日,由中国电子报与深圳投资推广署共同举办的“第六届(2018)中国FPGA产业发展论坛”在深圳召开. 作为四大通用集成电路芯片之一,FPGA(现场可编程门阵列)的重要性与CPU.存储器.DSP ...
- 基于tomcat与Spring的实现差异化配置方案
起因 在实际开发过程中经常需要加载各种各样的配置文件..比如数据库的用户名密码,要加载的组件,bean等等..但是这种配置在各个环境中经常是不一样的....比如开发环境和测试环境,真实的生产环境.. ...
- Android Gradle基于参数化配置实现差异化构建
一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...
- Bing词典vs有道词典比对测试报告——功能篇之辅助功能,差异化功能及软件的效能
1.辅助功能: 和有道相比,必应的词典加入了换肤功能,用户可以选择喜欢的颜色,而且必应的皮肤也比较多,这一点设计给必应增色不少. 相对而言,有道则加入了调节客户端字体的大小,如下,也比较人性化 2.差 ...
- 利用maven实现差异化配置
回顾过去 生产环境,测试环境,开发环境在不同的环境下会有各种各样的配置,比如数据库链接地址,账户名,密码等等.不同环境下都需要配置,但是配置却又不同.以前分享过一篇文章,介绍了我之前A公司的差异化配置 ...
- 3D图形引擎决定三维产业差异化
从2009年中国3D产业初步兴起开始,短短几年间中国的3D技术得到了飞速的发展,3D打印机.3D投影仪.Web3D.虚拟现实.场景漫游等等产业应用应运而生,设备制造商和内容提供商都开始发挥自主创新的优 ...
- Vue根据不同的路由文件实现打包差异化
有些时候我们经常一个项目中开发不同的功能,有可能一个前端项目中夹杂着不同系统之间的需求,最后打包发布的时候经常会将与项目不相关的代码一同打包进去,实际来讲这种操作也是不严谨的.那有没有办法可以根据某些 ...
- 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理
目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...
随机推荐
- 妙用PHP函数处理数组
PHP的数组是一种很强大的数据类型,与此同时PHP内置了一系列与数组相关的函数可以轻松地实现日常开发功能. 1. 取数组指定键名列 对于某些关联数组,有时候我们只想取指定键名的那部分,比如数组为 [' ...
- 对象命名为何需要避免'-er'和'-or'后缀
之前写过两篇关于软件工程中对象命名的文章:开发中对象命名的一点思考与对象命名怎么上手?从现实世界,但感觉还是没有说透, 在软件工程中,如果问我什么最重要,我的答案是对象命名.良好的命名能够反映系统的本 ...
- MFC中AfxBeginThread、AfxEndThread、GetExitCodeThread的配合使用(工作者线程)
//线程入口函数(全局) UINT MyThreadProc(LPVOID pParam) { //在需要添加返回值的地方 if (...) { AfxEndThread(0); return 0; ...
- 【SpringMVC】数据转换 & 数据格式化
数据转换 & 数据格式化 & 数据校验 数据转换 数据绑定流程 Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinder ...
- 线性判别分析(LDA):降维与分类的完美结合
在机器学习领域,线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的算法,它在降维和分类任务中都表现出色. LDA通过寻找特征空间中能够最大化类间方差和最小 ...
- Sentinel源码—3.ProcessorSlot的执行过程
大纲 1.NodeSelectorSlot构建资源调用树 2.LogSlot和StatisticSlot采集资源的数据 3.Sentinel监听器模式的规则对象与规则管理 4.AuthoritySlo ...
- 邮件自动回复助手(Rasa/SMTP)实现教程
在现代办公场景中,处理大量邮件是一项既耗时又容易出错的任务.为了提升工作效率,我们可以利用自然语言处理(NLP)和邮件传输协议(SMTP)技术,构建一个智能的邮件自动回复助手.本文将详细介绍如何使用P ...
- 在线modbus RTU报文解析器 报文解析工具
本文分享一个在线Modbus RTU报文解析器: 网址:https://www.bais.top/tools/modbusRTU/ 网站干净简洁: 如图: 集成了CRC校验,若报文不对则不会进行解析 ...
- 精选 14 款 .NET 开源、功能强大的快速开发框架,提高开发生产效率、避免工作996!
前言 最近发现DotNetGuide技术社区微信交流群有不少小伙伴在问:.NET有哪些不错的快速开发框架推荐的? 选择一款全面且功能强大的快速开发框架能够帮助我们解决C#..NET项目中的很多重复工作 ...
- 1.4K star!几分钟搞定AI视频创作,这个开源神器让故事可视化如此简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 story-flicks 是一个基于AI技术的自动化视频生成工具,能够将文字剧本快速转化为高 ...