HarmonyOS Next开发学习手册——自由流转

场景介绍

随着全场景多设备的生活方式不断深入,用户拥有的设备越来越多,不同设备都能在适合的场景下提供良好的体验,例如手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。但是,每个设备也有使用场景的局限,例如在电视上输入文本相对移动设备来说是非常糟糕的体验。当多个设备通过分布式操作系统能够相互感知、进而整合成一个超级终端时,设备与设备之间就可以取长补短、相互帮助,为用户提供更加自然流畅的分布式体验。

在HarmonyOS中,将跨多设备的分布式操作统称为流转;根据使用场景的不同,流转又分为跨端迁移和多端协同两种具体场景。

基本概念

  • 流转

在HarmonyOS中泛指跨多设备的分布式操作。流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转,实现如邮件跨设备编辑、多设备协同健身、多屏游戏等分布式业务。流转为开发者提供更广的使用场景和更新的产品视角,强化产品优势,实现体验升级。流转按照使用场景可分为跨端迁移多端协同

  • 跨端迁移

在用户使用设备的过程中,当使用情境发生变化时(例如从室内走到户外或者周围有更合适的设备等),之前使用的设备可能已经不适合继续当前的任务,此时,用户可以选择新的设备来继续当前的任务,原设备可按需决定是否退出任务,这就是跨端迁移场景。

常见的跨端迁移场景实例:在平板上播放的视频,迁移到智慧屏继续播放,从而获得更佳的观看体验;平板上的视频应用退出。

在应用开发层面,跨端迁移指在A端运行的UIAbility迁移到B端上,完成迁移后,B端UIAbility继续任务,而A端UIAbility可按需决定是否退出。

  • 多端协同

用户拥有的多个设备,可以作为一个整体,为用户提供比单设备更加高效、沉浸的体验,这就是多端协同场景。

常见的多端协同场景实例:

场景一:两台设备A和B打开备忘录同一篇笔记进行双端协同编辑,在设备A上可以使用本地图库中的图片资源插入编辑,设备B上进行文字内容编辑。

场景二:设备A上正在和客户进行聊天,客户需要的资料在设备B上,可以通过聊天软件打开设备B上的文档应用选择到想要的资料回传到设备A上,然后通过聊天软件发送给客户。

在应用开发层面,多端协同指多端上的不同UIAbility/ServiceExtensionAbility同时运行、或者交替运行实现完整的业务;或者多端上的相同UIAbility/ServiceExtensionAbility同时运行实现完整的业务。

典型场景

  • 媒体播控:使用媒体播控,可以简单高效地将音频投放到其他HarmonyOS设备上播放,如在手机上播放的音频,可以投到2in1设备上继续播放。
  • 应用接续:指当用户在一个设备上操作某个应用时,可以在另一个设备的同一个应用中快速切换,并无缝衔接上一个设备的应用体验。
  • 跨设备拖拽:跨端拖拽提供跨设备的键鼠共享能力,支持在平板或2in1类型的任意两台设备之间拖拽文件、文本。
  • 跨设备剪贴板:当用户拥有多台设备时,可以通过跨设备剪贴板的功能,在A设备的应用上复制一段文本,粘贴到B设备的应用中,高效地完成多设备间的内容共享。

应用接续特性简介

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

比如在用户使用过程中,使用情景发生了变化,之前使用的设备不再适合继续当前任务,或者周围有更合适的设备,此时用户可以选择使用新的设备来继续当前的任务。接续完成后,之前设备的应用可退出或保留,用户可以将注意力集中在被拉起的设备上,继续执行任务。

如图所示,在手机上编辑备忘录,到办公室后切换到平板上继续编辑,完成任务的无缝衔接。

运作机制

  1. 在源端,通过UIAbility的onContinue()回调,开发者可以保存待接续的业务数据。

例如,浏览器应用完成应用接续,在源端浏览一个页面,到对端继续浏览。系统将自动保存页面状态,如当前页面的浏览进度;开发者需要通过onContinue接口保存页面url等业务内容。

  1. 分布式框架提供跨设备应用界面、页面栈以及业务数据的保存和恢复机制,负责将数据从源端发送到对端。
  2. 在对端,同一UIAbility通过onCreate/onNewWant接口恢复业务数据。

发起接续的场景

针对不同类型的应用,推荐的应用接续发起的界面及接续同步内容如下:

  • 浏览器:网页内容详情页,网页浏览进度同步
  • 备忘录:备忘录详情页,备忘浏览进度同步
  • 新闻:新闻详情页,新闻浏览进度同步
  • 阅读:小说阅读页,小说阅读进度同步
  • 视频:视频播放页,视频播放进度同步
  • 音乐:音乐播放页,歌单播放页,音乐播放进度同步
  • 会议:会议界面,当前会议同步
  • 邮件:新建邮件、回复转发邮件、阅读某封邮件界面,编辑内容及附件同步
  • 办公编辑:某条编辑页面,编辑内容同步
  • CAD:CAD编辑界面,编辑内容同步
  • 地图:路线查询、导航界面,当前路线及导航同步

应用接续开发指导

通过应用接续,可以实现将应用当前任务(包括页面控件状态变量等)迁移到目标设备,并在目标设备上接续使用。

可以实现的功能包括:

  • 存储及恢复自定义数据(应用业务内容)。
  • 存储及恢复页面路由信息和页面控件状态数据。
  • 应用兼容性检测。
  • 支持应用根据实际使用场景动态设置迁移状态(默认迁移状态为ACTIVE激活状态)。

如编辑类应用在编辑文本的页面下才需要迁移,其他页面不需要迁移,则可以通过 setMissionContinueState 进行控制。

  • 支持应用动态选择是否进行页面栈恢复(默认进行页面栈信息恢复)。

如应用希望自定义迁移到其他设备后显示的页面,则可以通过wantConstant.Params进行控制。

  • 支持应用动态选择流转成功后是否退出迁移源端应用(默认流转成功后退出迁移源端应用)。则可以通过@ohos.app.ability.wantConstant (wantConstant) 进行控制。

约束与限制

需同时满足以下条件,才能使用该功能:

  • 设备限制
    HarmonyOS NEXT Developer Preview0及以上版本的设备。
  • 使用限制
    • 双端设备需要登录同一华为帐号。
    • 双端设备需要打开Wi-Fi和蓝牙开关。
      条件允许时,建议双端设备接入同一个局域网,可提升数据传输的速度。
    • 应用接续只能在同应用(UIAbility)之间触发,双端设备都需要有该应用。
    • 为了接续体验,在onContinue回调中使用wantParam传输的数据需要控制在100KB以下,大数据量请使用分布式数据对象进行同步。

接口说明

以下为实现应用接续的主要接口,详细的接口说明可查阅参考文档

接口名 描述
onContinue(wantParam : {[key: string]: Object}): OnContinueResult 续源端在该回调中保存迁移所需要的数据,同时返回是否同意迁移:
- AGREE:表示同意。- REJECT:表示拒绝,如应用在onContinue中异常可以直接REJECT。- MISMATCH:表示版本不匹配,接续源端应用可以在onContinue中获取到迁移对端应用的版本号,进行协商后,如果版本不匹配导致无法迁移,可以返回该错误。
onCreate(want: Want, param: AbilityConstant.LaunchParam): void; 接续目的端为冷启动或多实例应用热启动时,在该回调中完成数据恢复,并触发页面恢复。
onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void; 接续目的端为单实例应用热启动时,在该回调中完成数据恢复,并触发页面恢复。

开发步骤

  1. 申请权限。

说明
* 如果仅使用want迁移数据,无需申请权限。
* 如果需要使用分布式数据对象迁移数据,需要申请权限。

  1. 数据迁移需要申请ohos.permission.DISTRIBUTED_DATASYNC权限,详见声明权限。

  2. 由于数据迁移使用权限需要用户授权,所以在应用首次启动时弹窗向用户申请授权,详见向用户申请授权。

  3. 启用应用接续能力。
    在module.json5文件的abilities中,将continuable标签配置为“true”,表示该UIAbility可被迁移。配置为false的UIAbility将被系统识别为无法迁移且该配置默认值为false。

{
  "module": {
    ...
    "abilities": [
      {
        ...
        "continuable": true,
      }
    ]
  }
}
  1. 根据需要配置应用启动模式类型,配置详情请参照UIAbility组件启动模式。
  2. 在源端UIAbility中实现onContinue()接口。

当应用触发迁移时,onContinue()接口在源端被调用,开发者可以在该接口中保存迁移数据,实现应用兼容性检测,决定是否支持此次迁移。

  • 保存迁移数据:开发者可以将要迁移的数据通过键值对的方式保存在wantParam中。
  • 应用兼容性检测:开发者可以从onContinue()入参wantParam.version获取到迁移对端应用的版本号,然后与迁移源端应用版本号做兼容校验。
  • 迁移决策:开发者可以通过onContinue接口的返回值决定是否支持此次迁移。

示例如下:

import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';

export default class EntryAbility extends UIAbility {
  onContinue(wantParam: Record<string, Object>) {
    let versionDst = wantParam.version;  // 获取迁移对端应用的版本号
    let versionSrc: number = 0; // 获取迁移源端即本端应用的版本号
    if (versionDst > versionSrc) { // 兼容性校验
       // 兼容性校验不满足
      return AbilityConstant.OnContinu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值