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

news2025/3/16 17:17:34

 平台差异化

简介

跨平台使用场景是一套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-ignore
    return 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.coloradmin.cn/o/1695118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android开发-Android开发中的TCP与UDP通信策略的实现

Android 开发中的 TCP 与 UDP 通信策略的实现 1. 前言2. 准备工作3. Kotlin 中 TCP 通信实现客户端代码示例:服务器代码示例: 4. Kotlin 中 UDP 通信实现客户端代码示例:服务器代码示例: 5. TCP 与 UDP 应用场景分析TCP 实现可靠传…

词条唤夜兽唤夜兽的养殖与护理 幻兽帕鲁 唤夜兽怎么获取 唤夜兽去哪里抓 crossover玩Steam游戏

唤夜兽在地图上没有出现,是唤冬兽和雷冥鸟共同培育出来的帕鲁。 ------------------------- 介绍: 帕洛斯群岛之守护神,拥呼唤黑夜之力。 其会于灾厄席捲大地之际腾空而起,唤来无尽暗夜,试图封印灾厄。 ---------…

Video-FocalNets: Spatio-Temporal Focal Modulation for Video Action Recognition

标题:Video-FocalNets:用于视频动作识别的时空聚焦调制 源文链接:Wasim_Video-FocalNets_Spatio-Temporal_Focal_Modulation_for_Video_Action_Recognition_ICCV_2023_paper.pdf (thecvf.com)https://openaccess.thecvf.com/content/ICCV202…

深入解析文华量化交易策略---交易指令如何选择

随着金融投资的迅猛发展,自动化策略模型已逐渐成为现代投资领域的一股重要力量。量化交易模型均以数据为驱动,通过运用数学模型和算法,对期货、黄金等投资市场走势进行精准预测和高效交易。 艾云策略整理了量化策略相关资料,希望通…

从零开始搭建一个SpringBoot项目

目录 Spring BootSpring Boot 项目开发环境1、快速创建SpringBoot项目2、pom.xml 添加 Meavn 依赖3、配置application.yml4、验证数据库是否连接成功5、配置 Druid 数据源 Spring Boot 整合 MyBatis1、准备依赖2、application-dev.yml 配置3、启动类添加Mapper接口扫描器4、设置…

【Python搞定车载自动化测试】——Python基于Pytest框架实现UDS诊断自动化(含Python源码)

系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录💯💯💯 前言💯💯💯一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…

09.自注意力机制

文章目录 输入输出运行如何运行解决关联性attention score额外的Q K V Multi-head self-attentionPositional EncodingTruncated Self-attention影像处理vs CNNvs RNN图上的应用 输入 输出 运行 链接(Attention Is All You Need) 如何运行 解决关联性 a…

Iphone自动化指令每隔固定天数打开闹钟关闭闹钟

1.业务需求:小z每隔五天有一个夜班,然后下午会有三个小时的休息时间,如果闹钟不响就会错过交班日期,但是如果设置闹钟,iPhone的闹钟只能设定固定循环日期闹钟,或者一次的闹钟,导致要么忘记设闹钟…

【网络安全】社会工程学攻击与防范

一、社会工程学概述 1、社会工程学的定义 通过利用人们的心理弱点、本能反应、好奇心、信任、贪婪等一些心理陷阱进行的诸如欺骗、伤害、信息盗取、利益谋取等对社会及人类带来危害的行为或方法。 当网络恶意攻击者无法通过纯粹的计算机技术达到目的时,高超的情商…

【Text2SQL】WikiSQL 数据集与 Seq2SQL 模型

论文:Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning ⭐⭐⭐⭐⭐ ICLR 2018 Dataset: github.com/salesforce/WikiSQL Code:Seq2SQL 模型实现 一、论文速读 本文提出了 Text2SQL 方向的一个经典数据集 —…

Amesim应用篇-电芯等效电路模型标定

前言 为了使计算模型更加准确,在有电芯实验测试数据的情况下,依据现有的实验数据对Amesim中的电池等效电路模型进行标定。标定的目的是为了获得更加符合项目实际情况的电芯等效电路模型,标定完的电芯可以用于搭建PACK模型,也可以用于其他虚拟实验。本文以充电标定为例,进…

ideal 启动 多个 相同 工程

spring相同项目在idea多次运行 点击IDEA右上角项目的隐藏下拉框,出现下拉列表,点击Edit Configurations 弹出Run/Debug Configuration对话框,勾选Allow parallel run

vue实战 ---- 社交媒体---黑马头条项目

vue基础 1.介绍 为什么会有Vuex ? ​ Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 vuex是采用集中式管理组件依赖的共享数据的一个工具,可以解…

21-信号集处理函数

屏蔽信号集 屏蔽某些信号 手动自动 未处理信号集 信号如果被屏蔽,则记录在未处理信号集中 非实时信号(1~31),不排队,只留一个实时信号(34~64),排队,保留全部 信号集…

7. Spring MVC面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 什么是Spring MVC,简单介绍下你对Spring MVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进…

Jenkins安装部署--图文详细

Jenkins–从入门到入土 文章目录 Jenkins--从入门到入土一、Jenkins安装部署1、什么是Jenkins?2、Jenkins在开发过程中所属位置3、安装硬件环境和知识储备4、安装4.1、下载war启动4.2、Docker启动4.3、windows使用驱动安装 5、使用插件自定义 Jenkins6、创建第一个管理员用户 …

1+x(Java)中级题库易混淆理论题

<ALL表示小于最小 小于最高等同于小于ANY 使用USING子句&#xff0c;在使用连接字段时&#xff0c;都不能在前面加上表的前缀&#xff0c;因为此时这个字段已经是连接字段&#xff0c;不再属于某个单独的表。 数据库提供的自动将提供的数据类型数据转换为期望的数据类…

SpringBoot3笔记(一)SpringBoot3-核心特性

快速学习 SpringBoot 看官方文档&#xff1a; Spring Boot Reference Documentation 计划三天学完 笔记&#xff1a;https://www.yuque.com/leifengyang/springboot3 代码&#xff1a;https://gitee.com/leifengyang/spring-boot-3 一、SpringBoot3 - 快速入门 1.1 简介 …

深入解析:如何高效地更新Python字典

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、修改字典中的值 三、向字典中添加键值对 四、更新字典的两种方法总结 五、…

Re72:读论文 XLM Cross-lingual Language Model Pretraining

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名&#xff1a;Cross-lingual Language Model Pretraining 模型简称&#xff1a;XLM ArXiv地址&#xff1a;https://arxiv.org/abs/1901.07291 这是2019年NeurIPS的论文&#xff0c;主要做到就是跨语言…