《便单》APP开发技术分享四 —— HarmonyOS 鸿蒙Next原生互联(自由流转)

发布于 1周前 作者 caililin 来自 鸿蒙OS

《便单》APP开发技术分享四 —— HarmonyOS 鸿蒙Next原生互联(自由流转) 引言

在HarmonyOS的广阔生态中,六大原生特性——原生安全、原生精致、原生易用、原生智能、原生流畅与原生互联,共同构筑了系统独特的魅力。尤为引人注目的是“原生互联”中的自由流转功能,它正成为官方力推的新亮点。随着用户设备日益增多,每款设备虽各具特色,却也受限于特定使用场景。凭借其分布式操作系统的强大能力,使这些设备能够相互感知,无缝融合成一个超级终端,彼此间优势互补,协同工作。这不仅打破了设备间的界限,更实现了前所未有的分布式体验,让用户在各种场景下都能享受到自然流畅、无缝切换的智能化服务。

应用接续

如果说“原生互联”是鸿蒙系统的灵魂特性,那么“自由流转”便是其互联能力的璀璨明珠,而“应用接续”则是这颗明珠中最闪耀的核心。它代表了无缝衔接的极致体验,让用户在不同设备间切换时,能够轻松保持应用的连续性与一致性。

应用接续的精髓在于,无论用户在何处开始一段应用体验,都能无缝地迁移到另一台设备上的同一应用中,仿佛时间与空间从未阻隔。当场景变换,或是更合适的设备在旁,用户只需简单操作,即可让当前任务无缝流转,继续前行。

自由流转的直观展现,便是在目标设备的dock栏上优雅地呈现应用图标,这一设计不仅直观且富有吸引力,给用户带来前所未有的惊喜与便捷。其广泛的适用性更是令人赞叹,无论是精细的编辑工作、长篇文本的浏览、沉浸式的视频播放,还是重要的通话任务,都能轻松接入应用接续的怀抱,让多任务处理变得前所未有的流畅与高效。

接入步骤和踩坑

  1. 申请权限

如果是需要使用分布式同步能力来接续大数据,比如文件什么的,则需要申请权限ohos.permission.DISTRIBUTED_DATASYNC,在便单APP中不涉及这种情况,我们纯用want传参就行,后文也不考虑这个问题了。

  1. 启用应用接续能力

在module.json5文件的abilities中,将continuable标签配置为“true”,表示该UIAbility可被迁移。一般情况下需要将我们的EntryAbility设为这个属性。

"abilities": [
  {
    "name": "EntryAbility",
    "continuable": true,
    "srcEntry": "./ets/entryAbility/EntryAbility.ets",
  1. 准备需要传输的数据

当需要开始传输时,会触发对应UIAbility的onContinue生命周期,讲传入的wantParam中填入自己在对端恢复应用时需要的全部属性,如何返回AGREE即可直接开始流转,如果说参数准备失败,那么返回REJECT表示拒绝。

onContinue(wantParam: Record<string, Object>) {
  // 迁移数据保
  wantParam["data"] = '迁移的数据';
  return AbilityConstant.OnContinueResult.AGREE;
}
  1. 在对端恢复数据

在UIAbility的生命周期中,我们理应该在onCreate中处理数据,但是如果对端已经运行app,则会调用onNewWant,此时我们需要在这里处理,任何出现启动Window。

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION && want.parameters !== undefined) {
    solveContinueMessage(want.parameters, this.context)
  }
}

onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION && want.parameters !== undefined) {
    solveContinueMessage(want.parameters, this.context)
  }
  if (this.currentWindowStage !== null) {
    this.onWindowStageCreate(this.currentWindowStage);
  }
}
onWindowStageCreate(windowStage: window.WindowStage): void {
  if (this.currentWindowStage === null) {
    this.currentWindowStage = windowStage;
  }
  windowStage.loadContent('entryAbility/views/pages/Index', (err, data) => {
    let windowClass: window.Window = windowStage.getMainWindowSync();
    startUIAbility(windowClass, this.context)
  });
}

此时数据的位置在params.data中,记得转换为本来的数据格式(只能是基础数据格式,如果是Date类建议在准备数据时就传入时间戳)。

function solveContinueMessage(params: Record<string, object>, context: Context) {
  if (params.onContinue != undefined) {
    let data = String(params.data);
    (context as common.UIAbilityContext).restoreWindowStage(new LocalStorage());
  }
}

在处理完数据后,一定要记得调用context.restoreWindowStage(new LocalStorage());以通知源端数据已接受,不然远端无法正常退出。


更多关于《便单》APP开发技术分享四 —— HarmonyOS 鸿蒙Next原生互联(自由流转)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

太厉害了,周道宝贝🥰👍,

更多关于《便单》APP开发技术分享四 —— HarmonyOS 鸿蒙Next原生互联(自由流转)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


手机和pad之间能触发自由流转吗?为啥我在手机和pad上都按照了个包,不会触发自由流转

能啊?什么叫按照了个包?

好厉害啊,我的天啊,给周道第一杯水

好好好都来我这水

妙啊🥳,

zdddd厉害喵,

针对帖子标题《便单》APP开发技术分享四 —— HarmonyOS 鸿蒙Next原生互联(自由流转)的问题,以下是我基于鸿蒙系统的专业回答:

在HarmonyOS鸿蒙系统中,原生互联(自由流转)功能是实现设备间无缝协作的重要特性。该功能允许应用在不同设备间自由流转,为用户提供更加便捷、连续的使用体验。

在《便单》APP的开发中,利用鸿蒙系统的原生互联功能,可以实现应用在不同鸿蒙设备(如手机、平板、智慧屏等)间的流转。具体来说,用户可以在一个设备上启动《便单》APP,并随时将应用流转到另一个设备上,继续完成之前的操作。

为了实现这一功能,开发者需要在《便单》APP中集成鸿蒙系统的原生互联API。这些API提供了设备发现、连接管理、数据同步等关键功能,帮助开发者实现应用在不同设备间的流转。

此外,开发者还需要注意处理应用在不同设备间的状态同步和数据一致性等问题,以确保用户在不同设备上都能获得一致的使用体验。

如果问题依旧没法解决请联系官网客服,官网地址是: https://www.itying.com/category-93-b0.html

回到顶部