鴻蒙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.pswp.cn/bicheng/15782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15782.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++中靜態函數

在Qt中,可以通過在類中定義靜態方法來添加靜態方法。靜態方法是類的一部分,但不需要實例化類對象就可以直接調用。 下面是一個示例,演示了如何在類中添加靜態方法: cpp class MyClass { public: static void myStaticMethod…

Postman快捷功能-批量斷言與快速查詢替換

大家好,在我們日常的接口測試工作中,經常需要對接口返回的數據進行斷言,以確保接口的正確性。當接口數量較多時,逐個編寫斷言語句會變得非常繁瑣。此外,在接口測試過程中,我們還可能需要頻繁地查找和替換某…

Python自動化工具(桌面自動化、Web自動化、游戲輔助)

工具介紹 連點工具是一款可以模擬鍵鼠后臺操作的連點器工具。支持鼠標連點、鍵鼠腳本錄制,支持輔助您實現辦公自動化以及輔助游戲操作。功能簡潔易用,非常方便操作。連點工具讓您在在玩游戲、網購搶購的時候全自動點擊鼠標!主要功能有&#…

MySQL數據庫的數據文件保存在哪?MySQL數據存在哪里

在安裝好MySQL數據庫使用一段時間后,會產生許多的數據庫和數據。那這些數據庫的數據文件存放在本地文件夾的什么位置呢 一、默認位置 一般來說MySQL數據庫的數據文件都是存放在data文件夾之中,但是根據使用的存儲引擎不同,產生的一些文件也…

牛客前端面試高頻八股總結(2)(附文檔)

1.fetch請求方式 fetch是什么? fetch是一種http 數據請求的方式,是xml的一種替代方式。 怎么請求? fetch方法返回一個promise解析response顯示狀態(成功與否)的方法。 優點: 使用Promise,支持鏈…

24李林跌落神壇,880還刷嗎?還是換1000、900、660?

“李林今年跌落神壇了!” “全是固定題型沒新題,結果今年考的全是新題。” 880是“老真題的神”, 遇到24年,冷門考點多,計算量又大,就不靈了。 但“老真題”,還是得刷。就像往年真題是要刷的…

(十一)統計學基礎練習題五(50道選擇題)

本文整理了統計學基礎知識相關的練習題,共50道,適用于想鞏固統計學基礎或備考的同學。來源:如荷學數據科學題庫(技術專項-統計學二)。序號之前的題請看往期文章。 201) 202) 203) 2…

得帆信息PMO總監李健達受邀為第十三屆中國PMO大會演講嘉賓

全國PMO專業人士年度盛會 上海得帆信息技術有限公司aPaaS業務線副總裁、PMO總監李健達先生受邀為PMO評論主辦的2024第十三屆中國PMO大會演講嘉賓,演講議題為“AI時代的PMO工作法”。大會將于6月29-30日在北京舉辦,敬請關注! 議題簡要&#x…

39. 組合總和 - 力扣(LeetCode)

基礎知識要求: Java: 方法、集合、泛型、Arrays工具類、for循環、if判斷 Python: 方法、列表、for循環、if判斷 題目: 給你一個 無重復元素 的整數數組 candidates 和一個目標整數 target ,找出 candidates 中可以使…

Spring框架學習筆記(五):JdbcTemplate 和 聲明式事務

基本介紹&#xff1a;通過 Spring 框架可以配置數據源&#xff0c;從而完成對數據表的操作。JdbcTemplate 是 Spring 提供的訪問數據庫的技術。將 JDBC 的常用操作封裝為模板方法 1 JdbcTemplate 使用前需進行如下配置 1.1 在maven項目的pom文件加入以下依賴 <dependencies…

Java面試進階指南:高級知識點問答精粹(二)

Java 面試問題及答案 1. 什么是Java內存模型&#xff08;JMM&#xff09;&#xff1f;它在并發編程中扮演什么角色&#xff1f; 答案&#xff1a; Java內存模型&#xff08;JMM&#xff09;是一個抽象的模型&#xff0c;它定義了Java程序中各種變量&#xff08;線程共享變量&…

labelme的使用

創建虛擬環境 聽說是要用這個3.6版本的python環境 conda create --namelabelme python3.6激活虛擬環境 activate labelme下載labelme pip install labelme #安裝labelme組件啟動labelme 在你打開文件的時候推薦還是自己先建立一個label.txt 把自己要分的類別放進去 label.…

Python中的深拷貝與淺拷貝:深入解析與實用指南

Python中的深拷貝與淺拷貝&#xff1a;深入解析與實用指南 一、引言 在Python編程中&#xff0c;我們經常需要復制對象&#xff0c;但有時候僅僅復制對象的引用是不夠的&#xff0c;我們需要的是對象的真實副本。此時&#xff0c;我們就需要考慮使用深拷貝或淺拷貝。深拷貝和…

GPT-2添加PAD token

GPT-2和GPT-3模型&#xff08;包括其他類似系列&#xff09;通常沒有內置的PAD token&#xff0c;因為它們主要用于生成任務&#xff0c;而這些任務通常不需要填充。然而&#xff0c;在一些特定任務&#xff08;如批量處理或序列對齊&#xff09;中&#xff0c;添加PAD token是…

翻譯《The Old New Thing》- What‘s the deal with the EM_SETHILITE message?

Whats the deal with the EM_SETHILITE message? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071025-00/?p24693 Raymond Chen 2007年10月25日 簡要 文章討論了EM_SETHILITE和EM_GETHILITE消息在文檔中顯示為“未實現”的原因。這些…

前端 JS 經典:Web 性能指標

什么是性能指標&#xff1a;Web Performance Metrics 翻譯成 Web 性能指標&#xff0c;一般和時間有關系&#xff0c;在短時間內做更多有意義的事情。 一個站點表現得好與不好&#xff0c;標準在于用戶體驗&#xff0c;而用戶體驗好不好&#xff0c;有一套 RAIL 模型來衡量。這…

大專學歷java能找到工作嗎

就低學歷就業的情況&#xff0c;大專學歷的職業上限基本上是中小公司的開發小組長&#xff0c;中專或同等學歷的職業上限一般是軟件小作坊的項目經理。當下大專學歷能進大公司的可能性不能說沒&#xff0c;但相比前幾年&#xff0c;少了太多。有穩定業務渠道的軟件公司&#xf…

Vue.js功能實現博客

Vue.js功能實現博客 一、前言 Vue.js 是一款構建用戶界面的漸進式框架。今天我們將通過一個簡單的示例來展示如何使用 Vue.js 創建一個簡單的計數器功能&#xff0c;并在此過程中解釋每個步驟。 二、環境準備 在開始之前&#xff0c;請確保你的開發環境中已經安裝了 Node.j…

音視頻學習規劃

文章目錄 概述閑聊點 小結 概述 最近在學習音視頻&#xff0c;覺得還是要先寫個提綱&#xff0c;給自己制定下學習路線及目標。先寫下我的個人流程及思路。 ffmpeg的命令ffmpeg api播放器流媒體RTMP&#xff0c;HLS 閑聊點 先說下學習命令行吧&#xff0c;學習命令行是為了…

GitHub的原理及應用詳解(六)

本系列文章簡介&#xff1a; GitHub是一個基于Git版本控制系統的代碼托管平臺&#xff0c;為開發者提供了一個方便的協作和版本管理的工具。它廣泛應用于軟件開發項目中&#xff0c;包括但不限于代碼托管、協作開發、版本控制、錯誤追蹤、持續集成等方面。 GitHub的原理可以簡單…