鸿蒙应用迁移,鸿蒙应用开发入门(七):实现跨设备迁移

6.2 跨设备迁移

1. 分布式任务调度概述

在HarmonyOS中,分布式任务调度平台对搭载HarmonyOS的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用定义统一的能力基线、接口形式、数据结构、服务描述语言,屏蔽硬件差异;支持远程启动、远程调用、业务无缝迁移等分布式任务。

2. 实现调度的约束与限制

1)远程调用PA/FA,开发者需要在Intent中设置支持分布式的标记(例如:Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示该应用支持分布式调度),否则将无法获得分布式能力。

2)开发者通过在config.json中的reqPermissions字段里添加权限申请:

(1)以获取跨设备连接的能力和分布式数据传输的权限。

分布式数据传输的权限:

{"name": "ohos.permission.servicebus.ACCESS_SERVICE"}

三方应用使用权限:

{"name": "ohos.permission.servicebus.DISTRIBUTED_DATASYNC"}

系统应用使用权限:

{"name": "com.huawei.hwddmp.servicebus.BIND_SERVICE"}

(2)另外还有三个获取分布式设备信息需要的权限:

{"name": "ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"},

{"name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" },

{ "name": "ohos.permission.GET_BUNDLE_INFO"}

注意:还需要在开发的时候,要在Ability里主动声明,要用到的权限。

3)FA(Feature Ability,Page模板的Ability)的调用支持启动和迁移行为,在进行调度时:

(1)当启动FA时,需要开发者在Intent中指定对端设备的deviceId、bundleName和abilityName。

(2)FA的迁移实现相同bundleName和abilityName的FA跨设备迁移,因此需要指定迁移设备的deviceId。

3. 实现场景介绍

下面以设备A(本地设备)和设备B(远端设备)为例,介绍下面我们要实现的场景:

1)设备A启动设备B的FA:在设备A上通过本地应用提供的启动按钮,启动设备B上对应的FA。

2)设备A的FA迁移至设备B:设备A上通过本地应用提供的迁移按钮,将设备A的业务无缝迁移到设备B中。

3)设备A的FA迁移至设备B,还可以实现主动撤回迁移。

4. 具体实现前先了解要用的接口

1)启动远程FA

startAbility(Intent intent)接口提供启动指定设备上FA和PA的能力,Intent中指定待启动FA的设备deviceId、bundleName和abilityName。

2)迁移FA

continueAbility(String deviceId)接口提供将本地FA迁移到指定设备上的能力,continueAbilityReversibly(String deviceId) 接口提供将本地FA迁移到指定设备上的能力,这种迁移可撤回, reverseContinueAbility()接口提供撤回迁移的能力。

5. 实战远程启动FA页面

1)编程实现上面场景的界面:

ability_main.xml<?xml  version="1.0" encoding="utf-8"?>

xmlns:ohos="http://schemas.huawei.com/res/ohos"

ohos:height="match_parent"

ohos:width="match_parent"

ohos:orientation="vertical">

ohos:id="$+id:migration_btn_01"

ohos:height="match_content"

ohos:width="300vp"

ohos:text="1.启动远程设备的FA"

ohos:text_size="20fp"

ohos:text_color="#ffffff"

ohos:background_element="$graphic:button_bg"

ohos:layout_alignment="horizontal_center"

ohos:top_padding="8vp"

ohos:bottom_padding="8vp"

ohos:left_padding="40vp"

ohos:right_padding="40vp"

ohos:top_margin="20vp"

/>

ohos:id="$+id:migration_btn_02"

ohos:height="match_content"

ohos:width="300vp"

ohos:text="2.迁移到远程设备"

ohos:text_size="20fp"

ohos:text_color="#ffffff"

ohos:background_element="$graphic:button_bg"

ohos:layout_alignment="horizontal_center"

ohos:top_padding="8vp"

ohos:bottom_padding="8vp"

ohos:left_padding="40vp"

ohos:right_padding="40vp"

ohos:top_margin="20vp"

/>

ohos:id="$+id:migration_btn_03"

ohos:height="match_content"

ohos:width="300vp"

ohos:text="3.可迁回的迁移远程设备"

ohos:text_size="20fp"

ohos:text_color="#ffffff"

ohos:background_element="$graphic:button_bg"

ohos:layout_alignment="horizontal_center"

ohos:top_padding="8vp"

ohos:bottom_padding="8vp"

ohos:left_padding="40vp"

ohos:right_padding="40vp"

ohos:top_margin="20vp"

/>

button_bg.xml<?xml  version="1.0" encoding="utf-8"?>

ohos:shape="rectangle">

MigrationAbility和MigrationBackAbility// 调用AbilitySlice模板实现一个用于控制基础功能的FA

// Ability和AbilitySlice类均需要实现IAbilityContinuation及其方法,才可以实现FA迁移。AbilitySlice的代码示例如下

public class SampleSlice extends AbilitySlice implements IAbilityContinuation {

@Override

public void onStart(Intent intent) {

super.onStart(intent);

super.setUIContent(layout);

}

ability_migration.xml<?xml  version="1.0" encoding="utf-8"?>

xmlns:ohos="http://schemas.huawei.com/res/ohos"

ohos:height="match_parent"

ohos:width="match_parent"

ohos:background_element="#00ffff"

ohos:orientation="vertical">

ohos:id="$+id:text_title"

ohos:height="match_content"

ohos:width="250vp"

ohos:background_element="#0088bb"

ohos:layout_alignment="horizontal_center"

ohos:text="下面是一个可编辑的文本框"

ohos:text_size="50"

ohos:padding="5vp"

ohos:top_margin="30vp"

/>

ohos:id="$+id:textfield_back"

ohos:height="250vp"

ohos:width="250vp"

ohos:hint="请输入..."

ohos:layout_alignment="horizontal_center"

ohos:background_element="#ffffff"

ohos:text_color="#888888"

ohos:text_size="20fp"

ohos:padding="5vp"

/>

ohos:id="$+id:migration_button"

ohos:height="match_content"

ohos:width="match_content"

ohos:text="点击迁移"

ohos:text_size="20fp"

ohos:text_color="#ffffff"

ohos:background_element="$graphic:button_bg"

ohos:top_padding="8vp"

ohos:bottom_padding="8vp"

ohos:left_padding="50vp"

ohos:right_padding="50vp"

ohos:layout_alignment="horizontal_center"

ohos:top_margin="30vp"

/>

ability_migration_back.xml比ability_migration.xml多一个迁回按钮,另外主页上点击按钮跳转等,略...

2)使用分布式能力要求开发者在Ability对应的config.json中声明多设备协同访问的权限:

(1)三方应用部署权限、分布式数据传输的权限、系统应用使用权限的申请。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值