
HarmonyOS页面的分布式迁移和分布式文件的读取
1. 介绍
当前,在不同的设备上迁移一个任务的操作通常十分复杂,比如路上在手机里写了一半的邮件,回到家想切换到平板电脑更方便的处理;或者有时需要调用不同设备中的文档或图片素材,此时需要在不同设备间反复操作。
想要解决这些问题,我们可以通过HarmonyOS的分布式能力实现任务的跨设备迁移,保证业务在手机、平板等终端间无缝衔接,轻松的完成多设备之间的协同办公。本篇Codelab文档,我们通过模拟不同设备间协同的邮件编辑来做一个简单的演示,如下图,我们可以通过迁移按钮完成任务的跨设备迁移,并通过附件按钮调用跨设备的图片。
图1 设备A完成邮件编写并选择附件,流转到另一设备
图2 设备B弹出邮件界面,可继续完成邮件编写
2. 搭建HarmonyOS环境
- 安装DevEco Studio,详情请参考DevEco Studio下载。
- 设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
- 如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
- 如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
- 准备密钥和证书请求文件
- 申请调试证书
你可以通过如下设备完成Codelab:
- 开启了开发者模式的两部HarmonyOS真机
说明:
本篇Codelab所附代码适合在真机运行。运行时需要至少两台手机或平板处于同一个分布式网络中,可以通过操作如下配置实现:
所有设备接入同一网络;
所有设备登录相同华为帐号;
所有设备上开启"设置->更多连接->多设备协同 "。
3. 代码结构解读
本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在6 参考中提供下载方式,首先介绍一下整个工程的代码结构:
- bean:MailDataBean封装了邮件信息。
- Slice:MailEditSlice为进入邮件应用的回复页面,同时里面也展现了我们大部分的逻辑实现。
- ui:迁移设备选择框等功能实现。
- Utils:存放所有封装好的公共方法,如DeviceUtils、LogUtil等。
- MainAbility:动态权限的申请以及页面路由信息处理。
- resources:存放工程使用到的资源文件,其中resources\base\layout下存放xml布局文件;resources\base\media下存放图片资源。
- config.json:配置文件。
4. 权限申请
完成准备工作后,在HUAWEI DevEco Studio里创建项目。
本程序开发需要申请以下6个权限:
- ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允许获取分布式组网内的设备列表和设备信息。
- ohos.permission.DISTRIBUTED_DATASYNC:用于允许不同设备间的数据交换。
- ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允许监听分布式组网内的设备状态变化。
- ohos.permission.READ_USER_STORAGE:读取存储卡中的内容。
- ohos.permission.WRITE_USER_STORAGE:修改或删除存储卡中的内容。
- ohos.permission.GET_BUNDLE_INFO:用于查询其他应用的信息。
在项目配置文件"entry\src\main\config.json"中增加以下内容:
在MainAbility.java的onStart()中增加下面权限申请代码:
5. 界面实现
在"slice"文件夹中新建一个MailEditSlice.java用做回复邮件界面,在"resources\base\layout"路径下的moudle_mail_edit.xml来定义页面的布局。
moudle_mail_edit.xml内容如下:
创建bean/MailDataBean.java,用于表示邮件正文数据,代码如下:
在MailEditSlice页面中,我们把邮件内容初始化。
6. 页面迁移
我们需要通过实现IAbilityContinuation接口来完成跨设备迁移,具体可参照跨设备迁移开发指导。我们将MainAbility和MailEditSlice补充如下:
7. 邮件数据处理
在5 界面实现章节中我们已经实现了界面设计和初始化。
迁移的数据我们可以通过6 页面迁移中的onSaveData()和onRestoreData()方法来进行传递和恢复。
上面步骤完成了在不同设备间数据的传递,同时我们在MailEditSlice的内容初始化后面增加对传递数据的处理:
8. 获取分布式设备
在回复邮件界面中监听迁移按钮的点击事件,从窗口底部滑出分布式设备列表界面可供选择迁移,如果不存在分布式设备则弹出提示。
9. 读写分布式文件
分布式文件服务能够为用户设备中的应用程序提供多设备之间的文件共享能力,支持相同帐号下同一应用程序的跨设备访问,应用程序可以不感知文件所在的存储设备,能够在多个设备之间无缝获取文件。关于分布式文件的开发指导,可以参考分布式文件开发指导。
我们这里简单举例,通过 AVStorage来获取本机的媒体文件,然后通过Context.getDistributedDir()接口获取属于自己的分布式目录,再将本地图片保存到分布式目录下。
获取公共目录图片的代码如下:
在点击附件按钮获取图片时,则获取分布式路径下的文件列表,代码如下:
10. 恭喜您
目前您已经成功完成了Codelab并且学到了:
页面的分布式迁移
分布式文件的读取
11. 参考
