📚往期学习笔录📝:
📝 鸿蒙(HarmonyOS)北向开发知识点记录~
📝 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
📝 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
📝 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
📝 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
📝 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
📝 记录一场鸿蒙开发岗位面试经历~
📝 持续更新中……
场景
传统跨设备数据同步,需开发者完成:建立通信链接、消息收发处理、错误重试、数据冲突解决等一系列消息处理逻辑,工作量大且复杂。
设备之间的数据都是"变量",分布式数据对象即实现了对“变量”的“全局”访问。为开发者在分布式应用场景下提供简单易用的JS接口,轻松实现多设备间同应用的数据协同,同时设备间可以监听对象的状态和数据变更。
方案介绍
使用分布式数据对象进行跨设备数据同步时,需要申请ohos.permission.DISTRIBUTED_DATASYNC权限,允许不同设备间的数据交换,该权限为user_grant,需要向用户弹窗申请授权。
随后创建分布式数据对象并加入可信组网(进行跨设备数据同步的设备需要登录相同的华为账号,同一网络,并开启蓝牙)。
注:一个分布式对象加入组网时,如果它的数据与组网中的数据不同,它会刷新组网中的数据。若希望加入组网时不刷新组网中的数据,并且得到组网中的数据,可以将属性设置为undefined。(例如下文中的Message对象设置为:new Message(undefined,undefined) )。
实现效果
A、B两台设备分别点击创建分布式数据对象,并开启数据变更监听,此时在A设备输入数据,B设备即可自动同步。
开发步骤
一、申请权限
使用分布式数据对象进行跨设备数据同步时,需要申请ohos.permission.DISTRIBUTED_DATASYNC权限,该权限为user_grant,需要向用户弹窗申请授权。用户若拒绝授权,需要引导用户到设置–隐私和安全–多设备协同中授权,调用分布式数据对象相关能力时,建议先判断用户是否已授权。申请权限可参考:
//EntryAbility.ets
function reqPermissionsFromUser(permissions: Array<Permissions>,context:common.UIAbilityContext): void {
let atManager = abilityAccessCtrl.createAtManager();
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
atManager.requestPermissionsFromUser(context, permissions).then((data) => {
let grantStatus: Array<number> = data.authResults;
let length: number = grantStatus.length;
for (let i = 0; i < length; i++) {
if (grantStatus[i] === 0) {
// 用户授权,可以继续访问目标操作
console.info(`User authorization succeeded.`)