本示例展示了在eTS中如何使用分布式数据对象实现一个简单的分布式备忘录。
本示例用到了分布式设备管理能力接口(设备管理),实现设备之间的distributedDataObject对象的数据传输交互@ohos.distributedHardware.deviceManager。
分布式数据管理接口@ohos.data.distributedData。
用到了权限管理能力@ohos.abilityAccessCtrl。
分布式数据对象接口@ohos.data.distributedDataObject。
首页 | Note主页 | Canvas主页 |
---|---|---|
使用说明
分布式数据对象:组网内的设备,通过创建相同sessionId的分布式数据对象,修改分布式对象时,对端设备可以监听到数据变化并获取到新的数据,从而实现不同设备间的数据交换。
entry/src/main/ets/
|---pages
| |---index.ets // 选择分布式对象首页
| |---Edit.ets // 编写笔记页面
| |---IndexCanvas.ets // 画布首页
| |---IndexNote.ets // 笔记页面
|---MainAbility
| |---MainAbility.ts // 请求用户授权
|---model
| |---Const.ts // 静态资源模块(笔记标记颜色的图片资源)
| |---DistributedObjectModel.ts // 分布式Note数据对象类
| |---DistributedCanvasModel.ts // 分布式Canvas数据对象类
| |---Note.ts // Note对象操作类
| |---Canvas.ts // Canvas对象操作类
| |---RemoteDeviceModel.ts // 远程设备操作类
|---common
| |---BasicDataSource.ets // 初始化数据模块
| |---NoteItem.ets // 笔记列表模块
| |---DeviceDialog.ets // 分布式设备列表弹窗
| |---TitleBar.ets // 菜单栏模块
在分布式笔记应用中,分布式设备管理包含了分布式设备搜索、分布式设备列表弹窗、远端设备拉起三部分。
首先在分布式组网内搜索设备,然后把设备展示到分布式设备列表弹窗中,最后根据用户的选择拉起远端设备。
通过SUBSCRIBE_ID搜索分布式组网内的设备,详见startDeviceDiscovery(){}模块源码参考。
使用@CustomDialog装饰器来装饰分布式设备列表弹窗,源码参考。
通过startAbility(deviceId)方法拉起远端设备的包,源码参考。
(1) 管理分布式数据库
创建一个distributedObject分布式数据对象实例,用于管理分布式数据对象。详见distributedObject.createDistributedObject(),源码参考。
(2) 订阅分布式数据变化
通过this.distributedObject.on('status', this.statusCallback)监听分布式数据对象的变更。
(1)UIAbility拉起弹框请求用户授权:在onCreate()时通过abilityAccessCtrl.createAtManager.requestPermissionsFromUser(this.context, ['ohos.permission.DISTRIBUTED_DATASYNC']).then((data)=> {})获取不同设备间的数据交换权限,源码参考。
(2)将sessionID存在应用全局的UI状态存储AppStorage内:在onCreate(want, launchParam) {}时拿到sessionId并存储在AppStorage内,并把同时把sessionId绑定到@StorageLink上实现双向数据绑定。
(3)对笔记内容进行存储在dataArray:note[]中:通过this.noteDataSource['dataArray'] = this.globalObject.distributedObject.documents。
(4)笔记内容更新:通过绑定Button的onClick事件指定this.globalObject.update(index, this.note.title, this.note.content, this.note.mark)进行笔记内容和状态更新,源码参考。
(5)实现分布式数据自动同步:通过this.globalObject.distributedObject.setSessionId(this.sessionId),从而实现当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId的笔记数据自动同步,并将其封装在share()函数内,源码参考。
(6)在首页的onPageShow()钩子中,调用share()实现首页在分布式设备上同步渲染组件。
允许不同设备间的数据交换:ohos.permission.DISTRIBUTED_DATASYNC
允许系统应用获取分布式设备的认证组网能力:ohos.permission.ACCESS_SERVICE_DM
不涉及
1.本示例仅支持标准系统上运行。
2.本示例为Stage模型,已适配API version 10版本SDK,版本号:4.0.9.1,镜像版本号:OpenHarmony4.0.9.1;
3.本示例需要使用DevEco Studio 3.1 Beta2 (Build Version: 3.1.0.400, built on April 7, 2023)及以上版本才可编译运行;
4.本示例需要使用@ohos.distributedHardware.deviceManager系统权限的系统接口。使用Full SDK时需要手动从镜像站点获取,并在DevEco Studio中替换,具体操作可参考替换指南。
5.本示例所配置的权限均为system_basic或system_core级别(相关权限级别可通过权限定义列表查看),需要手动配置对应级别的权限签名(具体操作可查看自动化签名方案)。
6.本示例类型为系统应用,需要手动配置对应级别的应用类型("app-feature": "hos_system_app")。具体可参考profile配置文件bundle-info对象内部结构
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/SuperFeature/DistributedAppDev/DistributedNote/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。