HarmonyOS Next应用接续开发指南 原创

SameX
发布于 2025-3-3 10:30
1.8w浏览
0收藏

大家好!作为在华为鸿蒙开发领域深耕多年的开发者,今天我想和大家分享一下HarmonyOS Next中应用接续开发的相关知识。应用接续功能为用户带来了无缝切换设备使用应用的体验,大大提升了用户在多设备间的操作便利性。接下来,我们就深入探讨一下应用接续的具体内容。

应用接续的基本概念与应用场景

应用接续,简单来说,就是当用户在一个设备上操作某个应用时,能够在另一个设备上快速切换并继续该应用的任务,实现无缝衔接的使用体验。这一功能背后涉及到分布式状态同步技术,它确保了应用在不同设备间迁移时,用户的数据和操作状态能够得到准确的保存和恢复。

在实际使用场景中,应用接续发挥着重要作用。比如,当你在手机上浏览一篇长篇文章时,突然需要使用平板进行更舒适的阅读,这时应用接续功能就能让你在平板上继续从手机上中断的位置开始阅读,浏览器页面的滚动位置、阅读进度等都能完美同步。再比如,在PC上处理文档编辑任务时,如果需要外出,在手机上可以接着PC上的进度继续编辑,编辑器中的内容、格式设置等都不会丢失。这种从手机切换到平板,或者从PC继续手机上任务的场景,极大地提高了用户的工作和生活效率,让多设备协同使用更加流畅自然。

应用接续API解析

onContinue()

onContinue() 是应用接续中源端UIAbility的关键接口。当应用触发迁移时,这个接口会在源端被调用。开发者可以在这个接口中完成多项重要操作,比如保存迁移所需要的数据。你可以把当前应用的关键信息,像编辑器中的文本内容、浏览器的当前页面URL等,通过键值对的方式保存在 wantParam 中。同时,还能进行应用兼容性检测,从 onContinue() 的入参 wantParam.version 获取迁移对端应用的版本号,与源端应用版本号进行比对,判断是否支持此次迁移。如果版本不兼容,可以返回相应的错误信息提示用户。示例代码如下:

import { AbilityConstant, UIAbility } from '@kit.AbilityKit';
import { promptAction } from '@kit.ArkUI';

export default class EntryAbility extends UIAbility {
    onContinue(wantParam: Record<string, Object>) {
        let targetVersion = wantParam.version; 
        let versionThreshold: number = 1; 
        if (targetVersion < versionThreshold) {
            promptAction.showToast({
                message: '目标端应用版本号过低,不支持接续,请您升级应用版本后再试',
                duration: 2000
            });
            return AbilityConstant.OnContinueResult.MISMATCH;
        }
        let continueInput = '迁移的数据';
        if (continueInput) {
            wantParam["data"] = continueInput;
        }
        return AbilityConstant.OnContinueResult.AGREE;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

onCreate()

在目的端设备上,onCreate() 接口用于恢复迁移数据。通过 launchReason 判断该次启动是否为迁移启动,如果是,就可以从 want 中获取保存的迁移数据。例如:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
    storage: LocalStorage = new LocalStorage();
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        if (launchParam.launchReason == AbilityConstant.LaunchReason.CONTINUATION) {
            let continueInput = '';
            if (want.parameters != undefined) {
                continueInput = JSON.stringify(want.parameters.data);
                console.info(`continue input ${continueInput}`);
            }
            this.context.restoreWindowStage(this.storage);
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

onNewWant()

对于单实例应用,还需要额外实现 onNewWant() 接口。它的实现方式与 onCreate() 类似,也是在判断为迁移场景时,恢复数据并触发页面恢复。示例代码如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
    storage: LocalStorage = new LocalStorage();
    onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        console.info(`EntryAbility onNewWant ${AbilityConstant.LaunchReason.CONTINUATION}`);
        if (launchParam.launchReason == AbilityConstant.LaunchReason.CONTINUATION) {
            let continueInput = '';
            if (want.parameters != undefined) {
                continueInput = JSON.stringify(want.parameters.data);
                console.info(`continue input ${continueInput}`);
            }
            this.context.restoreWindowStage(this.storage);
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
收藏
回复
举报


回复
    相关推荐