实用指南:【鸿蒙生态共建】鸿蒙6适配-API变化与兼容(2.UI交互与基础能力篇)--《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

news/2025/12/9 21:56:53/文章来源:https://www.cnblogs.com/gccbuaa/p/19328510

HarmonyOS开发者版本6.0.0(API 20)Release(鸿蒙6) 在2025年9月25日正式发布。相对于HarmonyOS 5.0版本增加了多项新能力及对已有能力的优化。同时也有部分API进行了变更。

本篇内容是《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》这本书整体内容的延续,是咱这本书读者的福利,内容以本书的示例作为基础,适配鸿蒙6过程中,所需要完成的调整。并将这些调整记录分享给大家,本篇内容主要介绍与UI交互与基础能力的鸿蒙6兼容适配。

对本书感兴趣的同学可以点击以下链接进行购买,或者了解我的班级参加 班级共同学习,点击链接可进入(华为官方活动)

  • 机械工业出版社官方京东旗舰店
  • 机械工业出版社京东自营旗舰店
  • 机械工业出版社官方当当旗舰店
  • 机械工业出版社当当自营旗舰店

  往期福利:

  1. 【页面路由导航】三步实现页面跳转的完整示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  2. 【鸿蒙生态共建】一文10个示例讲懂鸿蒙系统ArkTS中的null与undefined的区别与应用-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  3. 【鸿蒙生态共建】一文两表三实例讲清async函数与普通函数的区别-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  4. 【鸿蒙生态共建】一文说清基础类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  5. 【鸿蒙生态共建】一文说明兼容版本、目标版本和编译版本的区别与应用实践-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  6. 【鸿蒙生态共建】一文说清复杂类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  7. 【鸿蒙生态共建】鸿蒙6适配-API变化与兼容(1.基础能力篇)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  8. 【鸿蒙生态共建】一文讲清如何实现对开发版及发布版分别单独配置签名证书-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  9. 【鸿蒙生态共建】鸿蒙6适配-API变化与兼容(2.UI交互与基础能力篇)--《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  10. 【鸿蒙生态共建】鸿蒙6适配-API变更与兼容(3.UI交互能力篇)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  11. 【鸿蒙生态共建】一文讲清从注册到发布共享库至openharmony三方库中心仓(Module化及复用)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  12. 【鸿蒙生态共建】一文讲清发布共享库至openharmony三方库中心仓时Module的配置-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  13. 【鸿蒙生态共建】一文讲清如何复用openharmony三方库中心仓中的共享库-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  14. 【鸿蒙生态共建】一文讲清使用Web组件加载网页的三种方法-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  15. 【鸿蒙生态共建】一文讲清窗口(window)的基础用法-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  16. 【鸿蒙生态共建】一文讲清窗口(window)的基础用法(二)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  17. 【鸿蒙生态共建】一文讲清窗口(window)的基础用法(三)数据状态变更的同步-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

1: 第7章示例源码:'px2fp'/'vp2px'/'px2vp'/'px2lpx' has been deprecated.

界页UI相关的研发中,经常性使用vp2px或px2vp等接口用于计算单位的转换。在早期的API版本中,vp2px、px2vp等接口是ArkUI的全局接口,该接口已经标为废弃,不推荐使用。当UI实例不明确时,使用默认屏幕的虚拟像素比进行转换,可能会存在转换后结果与预期不一致的情况。

在DevEco Studio 6中编译出提示警告,如下图所示:

现阶段,UIContext的vp2px、px2vp等接口为推荐的替代接口,能保证调用时UI实例已经创建,并返回正确的结果。

UIContext实例调用vp2px,px2vp等接口的方式,在API 12版本开始生效,如果是纯血鸿蒙的App,可以直接使用下面的方法进行API的升级。

  • 在UIAbility中调用:在onWindowStageCreate的方法里,执行windowStage.loadContent之后,可以通过windowStage.getMainWindowSync().getUIContext();获取UIContext实例,之后再使用UIContext实例调用vp2px或px2vp。
  • 在自定义组件中调用:通过this.getUIContext(); 获取UIContext实例,之后再使用UIContext实例调用vp2px或px2vp。
  • 在其它模块中调用:根据模块的调用关系,确定使用的UIContext实例,将该实例用为参数传入模块内,通过该实例调用vp2px或px2vp。

2: 第7章示例:display.getDefaultDisplaySync(),Function may throw exceptions. Special handling is required.

在鸿蒙系统中,App可以通过display.getDefaultDisplaySync()获取默认的dispaly。常见的写法为先使用一变量对获取的display存储,之后再对其相关信息进行操作,示例如下:

const ScreenInfo = display.getDefaultDisplaySync();
const displayHeight = ScreenInfo.height;
const displayWidth = ScreenInfo.width;

在DevEco Studio 6.0版本以编译上述代码时会提示警告Function may throw exceptions. Special handling is required.如下图所示

将上述代码增加try catch,警告即可解除。

try {const ScreenInfo = display.getDefaultDisplaySync();const displayHeight = ScreenInfo.height;
  const displayWidth = ScreenInfo.width;
} catch (error) {hilog.info(0x0000, '俩毛豆', '%{public}s', `getDefaultDisplaySync error Cause: ${JSON.stringify(error)}`);
}

3:第8章示例:'decodeWithStream' has been deprecated.(非流式解码)

Uint8Array 是常用的数据格式,通常用于网络请求,文件读取。因为数据的组织是8位Uint的Array,里面存的是数字,在开发调试时不是很方便。

在实际的使用时,也需要对其进行解码,转为具体的字符。

 decodeWithStream方法在从API version 9开始支持,从API version 12开始废弃,官方建议使用decodeToString替代,当使用decodeWithStream时,编译会报警告如下图所示。decodeToString方法在API 12开始支持,仅支持HarmonyOS NEXT的App,可以直接升级了。

下面的代码为使用decodeToString进行非流式解码的代码示例

// 原内容,俩毛豆 , 是不是不易查看
let uint8Data = new Uint8Array( [228,191,169,230,175,155,232,177,134]);// 使用decodeToString
let textDecoderOptions: util.TextDecoderOptions = {fatal: false,ignoreBOM : true
}
let decodeToStringOptions: util.DecodeToStringOptions = {stream: false
};
let textDecoder = util.TextDecoder.create('utf-8', textDecoderOptions);
let decodeToStr = textDecoder.decodeToString(uint8Data, decodeToStringOptions);
console.info("tran decodeToString = " + decodeToStr); // tran decodeToString = 俩毛豆

对应的输出日志截图

 4:第9章示例:geoLocationManager.on/off  Function may throw exceptions. Special handling is required.

通过geoLocationManager.on/off('locationChange')可开启/关闭位置变化订阅,并发起定位请求。但是会产生异常, Function may throw exceptions. Special handling is required.如下所示。

规避该警告的方式,需要对geoLocationManager.on/off增加try...catch。如下代码所示。

continuousRequest() {let request: geoLocationManager.ContinuousLocationRequest= {'interval': 1,'locationScenario': geoLocationManager.UserActivityScenario.NAVIGATION}let locationCallback = (location:geoLocationManager.Location):void => {console.log('BULocaltionManager locationChange data: ' + JSON.stringify(location));};try {geoLocationManager.on('locationChange', request, locationCallback);} catch (err) {console.info("BULocaltionManager continuousRequest errCode:" + JSON.stringify(err));}
}
stopCRequest() {try {geoLocationManager.off('locationChange');} catch (err) {console.error("errCode:" + err.code + ", message:"  + err.message);}
}

5: 第10章示例:'decodeWithStream' has been deprecated.(流式解码)

在研发过程中,网络通信、文件操作等场景通常需要使用数据流的方式进行数据处理。decodeWithStream方法为此提供了高效的流式解码能力,支持对分块到达的二进制数据进行实时解码。在网络数据流传输、大文件分块读取及分布式设备通信等场景中发挥关键作用,通过逐块解码的方式显著提升处理效率,降低内存消耗,确保数据处理的实时性和系统性能。 

decodeWithStream方法在从API version 9开始支持,从API version 12开始废弃,官方建议使用decodeToString替代,当使用decodeWithStream时,编译会报警告如下图所示。decodeToString方法在API 12开始支持,仅支持HarmonyOS NEXT的App,可以直接升级了。

下面的代码为使用decodeToString方法及decodeToString进行流式解码的代码示例

// 下面的代码模拟从网络或文件流中分三次接收的数据块,使用decodeToString进行解码。
// 中文"俩毛豆"的UTF-8编码:[228,191,169,230,175,155,232,177,134]
const dataChunks: Uint8Array[] = [// "俩" 的完整字节 + "毛" 的部分字节 (230)new Uint8Array([228, 191, 169, 230]),// "毛" 的剩余字节 (175 155) + "豆" 的部分字节 (232)new Uint8Array([175, 155, 232]),// "豆" 的剩余字节 (177 134)new Uint8Array([177, 134])
];// 创建解码器配置
let textDecoderOptions: util.TextDecoderOptions = {fatal: false,  // 遇到无效字节不抛出异常ignoreBOM: true // 忽略字节顺序标记
};// 创建解码操作配置 - 使用流模式
let decodeToStringOptions: util.DecodeToStringOptions = {stream: true // 启用流式处理
};// 创建UTF-8解码器实例
let textDecoder = util.TextDecoder.create('utf-8', textDecoderOptions);
let finalResult = '';
console.log("开始流式解码...");// 模拟分三次接收并处理数据
for (let i = 0; i < dataChunks.length; i++) {console.log(`处理第${i + 1}个数据块,字节数: ${dataChunks[i].length}`);console.log(`数据块${i + 1}十六进制: [${Array.from(dataChunks[i]).map(b => b.toString(16)).join(', ')}]`);// 解码当前数据块let partialResult = textDecoder.decodeToString(dataChunks[i] as Uint8Array,decodeToStringOptions);console.log(`第${i + 1}次解码结果: "${partialResult}"`);console.log("---");// 累积结果if (partialResult) {finalResult += partialResult;}
}// 处理完成后,需要调用一次非流式解码以确保所有缓存数据被处理
let flushOptions: util.DecodeToStringOptions = {stream: false // 关闭流模式,刷新缓冲区
};// 传入空数据来刷新解码器
let flushResult = textDecoder.decodeToString(new Uint8Array(0) as Uint8Array,flushOptions
);
if (flushResult) {console.log(`刷新缓冲区得到: "${flushResult}"`);finalResult += flushResult;
}
console.log(`最终解码结果: "${finalResult}"`); // 输出: "俩毛豆"

执行结果日志如下:

总结: 

本文针对《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者提供鸿蒙6.0兼容适配方案,重点解决5个关键API变更:1)废弃的vp2px/px2vp单位转换接口需改用UIContext实例调用;2)display.getDefaultDisplaySync()需增加try-catch异常处理;3)废弃的decodeWithStream编解码接口需升级为decodeToString;4)geoLocationManager.on/off需封装异常捕获;5)流式解码需采用新的分块处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/995597.shtml

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

相关文章

2026考研政治肖秀荣 408真题教材 资料提供

考研的家人门,是时候背肖秀荣啦分享链接 1、肖秀荣: 链接: https://yun.139.com/shareweb/#/w/i/2rJXzofrVU6xu 提取码:svpg 2、408真题【2009-2025】 链接: https://yun.139.com/shareweb/#/w/i/2rJXAcj2C5xxz …

告别选择困难!SAT辅导机构大揭秘 - 品牌测评鉴赏家

告别选择困难!SAT辅导机构大揭秘选择 SAT 辅导机构,你真的了解这些吗? 准备踏上 SAT 备考征程的小伙伴们,是不是一打开网页,就被铺天盖地的辅导机构广告晃花了眼😵 “顶尖师资”“超高通过率”“独家秘籍”………

ubuntu docker运行大模型

安装docker 安装依赖 sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release 添加官方 Docker 源 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ub…

【自荐】OneClip—— 一款简单专业的 macOS 剪贴板管理工具

官网 :https://oneclip.cloud/ 目前已经开源了早期版本 下载地址+仓库地址:https://github.com/Wcowin/OneClip/releases 或者使用 Homebrew 安装 OneClip:# 1. 首次安装请先添加 tap(从 Gitee 拉取) brew tap W…

igbt模块的栅极驱动芯片,栅极电阻计算

以FS150R12KT4为例,针对该IGBT模块选择栅极驱动芯片,栅极电阻。 首先,已知驱动栅极驱动芯片的电源是15V,开关频率是15kHZ 设定上升时间和下降时间是0.3us(为什么这么设计的呢,因为开关频率是15kHZ,转换成周期T=…

托福一对一机构怎么选?高性价比推荐+避坑指南,2025备考党必看! - 品牌测评鉴赏家

托福一对一机构怎么选?高性价比推荐+避坑指南,2025备考党必看!一、托福备考痛点:为什么越来越多人选择一对一课程? (一)传统班课的局限性 在托福备考的赛道上,许多同学都曾在传统班课的浪潮中奋力前行,却发现…

构建高准确率、可控、符合规范的政务数据库审计和监测方案

一、概要 提示:本文旨在系统性阐述政务行业数据库风险监测的整体框架与实践成效,突出数据化治理与落地成果。在数字化政务全面推进的背景下,数据库已成为政府数据资产的核心载体与安全薄弱环节。“知形-数据库风险监…

疫苗的“设计图纸”如何变成现实?浅谈重组蛋白技术

想象一下,当一种新的病毒出现,科学家需要在最短的时间内为全人类打造一面“免疫盾牌”——这听起来像是一项不可能的任务。但现代生物技术的进步,尤其是重组蛋白技术,已经让这一过程变得空前高效与精准。这篇文章将…

数据脱敏:在数据价值与隐私安全之间构建平衡

在大数据与数字化转型的浪潮中,数据已成为机构与企业最核心的资产之一。然而,随着数据的集中与流动,隐私泄露风险也日益加剧。如何在充分利用数据价值的同时,确保个人敏感信息与商业机密的安全?数据脱敏作为一种关…

TK: 计算三角形的面积

TK代码,将textvariable绑定,改为直接使用text属性设置。以下是修改后的代码,关键改动已用注释标出:import tkinter as tk import tkinter.ttk as ttk import tkinter.messagebox as msgbox # 添加缺失的导入class …

SAT 辅导机构怎么选?2025 年高性价比机构测评指南(附避坑攻略) - 品牌测评鉴赏家

SAT 辅导机构怎么选?2025 年高性价比机构测评指南(附避坑攻略)一、选机构先看 “硬指标”:三大核心维度帮你筛出优质选项 (一)师资实力:实考经验 + 教研能力是提分 “双保险” 真正懂 SAT 的老师,不仅要会教,…

SAT 辅导机构怎么选?2025 年高性价比机构测评与避坑指南(附收费标准与选课攻略) - 品牌测评鉴赏家

SAT 辅导机构怎么选?2025 年高性价比机构测评与避坑指南(附收费标准与选课攻略)一、SAT 辅导市场现状:价格差异大,如何找到高性价比选择? (一)主流收费模式解析 录播课:价格区间 3000-8000 元,适合自律性强、…

2025春季 PTA 中国大学MOOC上面的数据结构测试第三题 待修正中

2025春季 PTA 中国大学MOOC上面的数据结构测试第三题 待修正中这是一道非常经典的计算题,两个多项式相乘。 但是个人觉得就是还是有一小部分的内存泄漏隐患和那个代码注释尚未解释完全。希望之后能够做的更好。 大多数…

zfk_蓝桥杯C++学习_递归及时空复杂度

递归 一、递归的介绍 概念: 递归是指函数直接或间接调用自身的过程。 解释递归的两个关键要素: 1.基本情况(递归终止条件):递归函数中的一个条件,当满足该条件时,递归终止,避免无限递归。可以理解为直接解决极…

完整教程:C如何调用Go

完整教程:C如何调用Go2025-12-09 21:37 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

vllm部署

python环境配置 (推荐) 创建一个新的 uv 环境。使用 --seed 在环境中安装 pip 和 setuptools。 uv venv llm --python 3.12.9 --seed source vllm/bin/activate 首先,请安装huggingface_hub库: pip install --upgrad…

漏洞赏金猎人不会告诉你的秘密:从100多个已报告漏洞中总结的技巧

本文分享了一名经验丰富的漏洞赏金猎人通过提交100多个有效漏洞后总结出的核心策略和隐秘技巧,重点强调了侦察在整个测试过程中占据80%的重要性,以及如何避免新人常犯的错误。:man_detective: 漏洞赏金他们不会告诉你…

《程序员修炼之道:从小工到专家》笔记7

1.原型与便笺:原型是为了学习而构建的,不是为了交付。它的目的是回答诸如“这个架构是否可行?”、“用户界面这样设计流程是否顺畅?”等问题。可以忽略细节:性能、错误处理、完整性。构建原型是一个概念性实验。 …