一、应用衔接

应用衔接指当用户在一个设备上操作某个应用时,可以在另一个设备的相同应用中快速切换,无缝衔接上一个设备的应用体验。

场景:在手机上编辑备忘录,到办公室后切换到电脑上继续编辑,完成任务的无缝衔接。

鸿蒙系统底层解决了应用接续过程中设备发现、连接、组网等过程繁琐的开发难点,应用在接入时仅需关注数据的传输和恢复。

二、限制

2.1 设备版本限制

限制 说明
设备版本 HarmonyOS NEXT Developer Preview0及以上版本
模拟器 暂不支持

2.2 使用限制

限制 说明
账号要求 双端设备需要登录同一华为账号
网络要求 双端设备需要打开WLAN和蓝牙开关,或在设置中启用“多设备协同增强服务”
功能开关 双端设备需在设置中开启“多设备协同 → 接续”功能
应用安装 双端设备都需要安装该应用
数据量 onContinue回调中使用wantParam传输的数据需控制在100KB以下,大数据量使用分布式对象迁移

2.3 权限说明(API11及以前)

API12起,无需申请ohos.permission.DISTRIBUTED_DATASYNC权限。API11及以前需要声明该权限并向用户申请授权。

三、建议

应用接续一般用于用户长时间停留的页面,默认情况下,应用接续完成后,源端应用会自动退出。

垂类 场景 发起接续页面与接续同步内容 接续完成后源端应用退出方案
工具 备忘录、笔记、日历、邮箱、浏览器 详情页,浏览/编辑进度同步 退出
出行导航 地图服务 路线查询、导航界面 退出
影音娱乐 视频/音乐/直播 播放进度同步 按需适配
新闻阅读 电子书/新闻 阅读进度同步 退出(听书类可不退出仅暂停)
办公 会议 当前会议同步 不退出应用,仅退出会议
社交通讯 社交媒体平台 浏览及编辑进度同步 按需适配
拍摄美化 图片/视频编辑 编辑内容及进度同步 退出

四、运作机制

源端:onContinue()保存业务数据
    ↓
分布式框架:跨设备发送数据
    ↓
对端:onCreate()/onNewWant()恢复业务数据

五、主要接口

接口 描述
onContinue(wantParam) 接续源端在该回调中保存迁移数据,返回AGREE/REJECT/MISMATCH
onCreate(want, launchParam) 接续目的端冷启动或多实例应用热启动时,恢复数据
onNewWant(want, launchParam) 接续目的端单实例应用热启动时,恢复数据

onContinue返回值说明

返回值 说明
AGREE 同意迁移
REJECT 拒绝迁移(如onContinue中异常)
MISMATCH 版本不匹配,无法迁移

六、开发步骤

6.1 启用应用接续能力

module.json5文件的abilities中,将continuable标签配置为true

{
  "module": {
    "abilities": [
      {
        "continuable": true
      }
    ]
  }
}

6.2 源端保存迁移数据

export default class EntryAbility extends UIAbility {
  onContinue(wantParam: Record<string, Object>) {
    // 检测对端应用版本兼容性
    const targetVersion = wantParam.version;
    const versionThreshold: number = 1000;
    
    if (targetVersion < versionThreshold) {
      // 版本不匹配,提示用户
      return AbilityConstant.OnContinueResult.MISMATCH;
    }
    
    // 保存迁移数据
    const continueInput = AppStorage.get('entryAbilityContext') as string;
    if (continueInput) {
      wantParam['data'] = continueInput;
    }
    
    return AbilityConstant.OnContinueResult.AGREE;
  }
}

6.3 对端恢复数据

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
      // 设置迁移状态为ACTIVE
      this.context.setMissionContinueState(AbilityConstant.ContinueState.ACTIVE);
      
      // 恢复迁移数据
      if (want.parameters !== undefined) {
        if (typeof want.parameters.data === 'string') {
          AppStorage.setOrCreate('entryAbilityContext', want.parameters.data);
        }
      }
      
      // 恢复页面栈
      this.context.restoreWindowStage(new LocalStorage());
    }
  }
}

注意restoreWindowStage(this.storage)必须在同步接口方法中执行,不能在异步回调中执行。

七、可选配置

7.1 支持同应用中不同Ability跨端迁移

module.json5中配置continueType字段,需要迁移的两个Ability的continueType取值必须保持一致。

{
  "abilities": [
    {
      "continuable": true,
      "continueType": ["continueType1"]
    }
  ]
}

7.2 支持同应用不同BundleName的Ability跨端迁移

module.json5中配置continueBundleName字段,添加对端应用的BundleName。

{
  "abilities": [
    {
      "continueType": ["continueType"],
      "continueBundleName": ["com.demo.example2"]
    }
  ]
}

7.3 支持不同开发者的应用跨端迁移

需要在AGC平台申请“接续服务”,配置接续应用的APP ID。

7.4 快速启动目标应用

module.json5continueType标签中添加"_ContinueQuickStart"后缀:

{
  "abilities": [
    {
      "continueType": ["EntryAbility_ContinueQuickStart"]
    }
  ]
}

配置后,用户发起接续时会立即收到PREPARE_CONTINUATION请求(提前拉起),随后收到CONTINUATION请求(正式接续)。

7.5 动态配置迁移能力

通过setMissionContinueState()接口动态控制迁移能力开关:

状态值 含义
ACTIVE 应用当前可迁移能力开启
INACTIVE 应用当前可迁移能力关闭

7.6 按需迁移页面栈

当前仅支持router路由的页面栈信息自动恢复,暂不支持navigation路由。

配置wantParam[SUPPORT_CONTINUE_PAGE_STACK_KEY]可控制是否进行页面栈恢复。

7.7 按需退出

配置wantParam[SUPPORT_CONTINUE_SOURCE_EXIT_KEY]可控制迁移成功后是否退出迁移源端应用。

八、核心点

要点 说明
核心接口 onContinue(源端保存)、onCreate/onNewWant(对端恢复)
配置标签 continuable: true
数据限制 100KB以下,大数据量使用分布式对象
迁移状态 ACTIVE(可迁移)/ INACTIVE(不可迁移)
版本要求 HarmonyOS NEXT Developer Preview0+,暂不支持模拟器

开发流程

在module.json5中配置continuable: true
    ↓
源端实现onContinue保存数据
    ↓
对端实现onCreate/onNewWant恢复数据
    ↓
调用restoreWindowStage恢复页面栈
    ↓
(可选)配置continueType/continueBundleName/快速启动等

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐