#星光计划2.0# PageAbility跨设备迁移开发实战——问答互动 原创 精华
【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划2.0】
活动链接: https://harmonyos.51cto.com/posts/9422
跨设备迁移是指将应用中的Page页迁移到另一设备中。可以同步应用数据,甚至可以在的不同设备间迁移,是HarmonyOS特色之一。于是,我以官方给了分布式邮件系统为例,写了一个简单的问答互动应用。用户在设备A上提问,在设备B上回答,信息通过迁移传递,并且能查看问答记录。
Table of Contents
效果展示
主要功能
- 实现问答界面,通过发送按钮将问题、答题等信息转递到另一设备上。
- 实现问题记录界面,对每个完整的问答进行记录,方便查看。
- 设备间的数据进行同步,拥有相同的问答记录。
迁移的主要步骤
- 设备A上的Page请求迁移。
- HarmonyOS处理迁移任务,并回调设备A上Page的保存数据方法,用于保存迁移必须的数据。
- HarmonyOS在设备B上启动同一个Page,并回调其恢复数据方法。
PageAbility
实现迁移是需要实现IAbilityContinuation
接口的,该接口如下:
除了一些异常码枚举外,都是迁移中需要用到的主要接口,onStartContinuation()
是迁移开始前的预处理函数,可以在这加一些条件检测,提示等。但是在开始请求迁移前,需要申请权限ohos.permission.DISTRIBUTED_DATASYNC
。config.json中的配置如下:
config.json
接下来只需要PageAbility
实现Ability
中的onRequestPermissionsFromUserResult
接口,就能在启用迁移之前完成权限申请了。
完成权限申请后,只需要通过事件来触发迁移开关就行了。可以通过按钮的点击事件的来触发迁移开关continueAbility()
,如下:
最重要的两个接口莫过于onSaveData
、onRestoreData
了,一个是在迁移的时候,将设备A的需要输入的数据存储,另一个是在设备B进行迁移时,恢复数据。
其中的IntentParams
是迁移的数据包,提供了setParam
、getParam
,来传输Key-Value
数据。
设备B上只要正常运行了onRestoreData
后,那就会回调设备A上的onCompleteContinuation
,表示迁移顺利完成,否则回调onFailedContinuation
,通过捕捉异常码可进行异常处理。而我在正常迁移完成后,进行了问答记录的本地存储:
具体代码
由于目录树中文件较多,整个工程文件的git路径为:
https://gitee.com/baboon-chen/harmony-osexample.git
需要特殊注意的点:
点开之前以为是在线问答贴