平臺差異化
簡介
跨平臺使用場景是一套ArkTS代碼運(yùn)行在多個(gè)終端設(shè)備上,如Android、iOS、OpenHarmony(含基于OpenHarmony發(fā)行的商業(yè)版,如HarmonyOS Next)。當(dāng)不同平臺業(yè)務(wù)邏輯不同,或使用了不支持跨平臺的API,就需要根據(jù)平臺不同進(jìn)行一定代碼差異化適配。當(dāng)前僅支持在代碼運(yùn)行態(tài)進(jìn)行差異化,接下來詳細(xì)介紹場景及如何差異化適配。
使用場景及能力
使用場景
平臺差異化適用于以下兩種典型場景:
- 自身業(yè)務(wù)邏輯不同平臺本來就有差異;
- 在OpenHarmony上調(diào)用了不支持跨平臺的API,這就需要在OpenHarmony上仍然調(diào)用對應(yīng)API,其他平臺通過Bridge橋接機(jī)制進(jìn)行差異化處理;
- 開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]點(diǎn)擊或者復(fù)制轉(zhuǎn)到。
判斷平臺類型
可以通過let osName: string = deviceInfo.osFullName;
獲取對應(yīng)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應(yīng)用平臺上業(yè)務(wù)邏輯
} else if (osName.startsWith('Android')) {
// Android應(yīng)用平臺上業(yè)務(wù)邏輯
} else if (osName.startsWith('iOS')) {
// iOS應(yīng)用平臺上業(yè)務(wù)邏輯
}
}
非跨平臺API處理
在跨平臺工程中如果調(diào)用非跨平臺API,編譯時(shí)IDE會觸發(fā)攔截并報(bào)錯(cuò)。接下來以調(diào)用wifiManager.isWifiActive()
判斷WiFi開關(guān)是否打開為例,這個(gè)API當(dāng)前是不支持跨平臺的。
示例代碼:
test2(){
let isActive = wifiManager.isWifiActive();
}
IDE報(bào)錯(cuò):
> 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
此時(shí)可以將涉及到的API寫到一個(gè)后綴為**.ts**文件,然后在不支持的API上面增加// @ts-ignore
或// @ts-nocheck
屏蔽告警,開發(fā)者需要保證只在OpenHarmony應(yīng)用平臺上才運(yùn)行這一段邏輯,Android和iOS應(yīng)用平臺上可以借用Bridge橋接機(jī)制處理,示例代碼如下:
- 新建一個(gè)
WiFiUtil.ts
,并忽略告警:
import wifiManager from '@ohos.wifiManager'
export class WiFiUtil {
static isActive(): boolean {
//@ts-ignore
return wifiManager.isWifiActive();
}
}
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
2. 根據(jù)不同平臺差異化邏輯,Android和iOS應(yīng)用平臺上通過[Bridge機(jī)制]橋接到對應(yīng)平臺的業(yè)務(wù)邏輯實(shí)現(xiàn)上:
checkTestWiFi(): void {
let osName: string = deviceInfo.osFullName;
console.log('osName = ' + osName);
if (osName.startsWith('OpenHarmony')) {
// OpenHarmony應(yīng)用平臺
let isActive = WiFiUtil.isActive();
this.message = isActive ? '已連接' : '未連接';
} else {
// Android和iOS應(yīng)用平臺上,中轉(zhuǎn)到原生
let bridge = Bridge.createBridge('Bridge');
bridge.callMethod('isWiFiActive').then((res) = > {
// 業(yè)務(wù)邏輯處理...
}).catch(() = > {
})
}
}
-
Android
+關(guān)注
關(guān)注
12文章
3917瀏覽量
127036 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1966瀏覽量
29962 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3635瀏覽量
16059 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4359
發(fā)布評論請先 登錄
相關(guān)推薦
評論