源端设备的onContinue应该怎么写?

A设备利用startAbility拉起B设备的UIAbility时,A设备page里的代码如下:

let bundleFlag = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_HAP_MODULE
         let bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleFlag)
         let want: Want = {
            deviceId: AppStorage.get('selectDeviceId') as string,
            bundleName: bundleInfo.name,
            moduleName: bundleInfo.hapModulesInfo[0].name,
            abilityName: 'EntryAbility',
            parameters: { selectMusicIndex: AppStorage.get('selectMusicIndex') as number }
         }
         hilog.debug(0x0001, 'RemoteDeviceManager_send', JSON.stringify(want.deviceId))
         hilog.debug(0x0001, 'RemoteDeviceManager_send', JSON.stringify(want.bundleName))
         hilog.debug(0x0001, 'RemoteDeviceManager_send', JSON.stringify(want.moduleName))
         hilog.debug(0x0001, 'RemoteDeviceManager_send', JSON.stringify(want.abilityName))
         hilog.debug(0x0001, 'RemoteDeviceManager_send', JSON.stringify(want.parameters))
         let context = getContext(this) as common.UIAbilityContext
         context.startAbility(want)
            .then(() => hilog.debug(0x0001, 'RemoteDeviceManager_send', 'send success'))
            .catch((error: BusinessError) => hilog.debug(0x0001, 'RemoteDeviceManager_send', JSON.stringify(error)))

A设备UIAbility的onContinue如下:

onContinue(wantParam: Record<string, number>): AbilityConstant.OnContinueResult {
      //
      return AbilityConstant.OnContinueResult.AGREE
   }

我在startAbility时已经保存了参数,onContinue里还需要保存吗?如果需要,应该怎么写才能保存参数?

目前onContinue还没写,A设备startAbility时会报错,错误码401,官网文档错误码链接:通用错误码401

阅读 520
avatarAI BotBETA

从你的问题描述来看,你正在使用OpenHarmony的Ability系统,并在尝试从设备A启动设备B的一个UIAbility。同时,你在A设备的UIAbility中定义了onContinue方法,但不确定是否需要在其中保存参数,以及如何保存。

错误码401通常表示参数检查失败。这可能是因为onContinue方法定义的参数与期望的不匹配。

在OpenHarmony的Ability系统中,onContinue方法用于在Ability被继续时获取之前保存的数据。通常,这个方法会在你的Ability被系统回收后,当用户再次回到这个Ability时被调用。

在你的代码中,startAbility方法中的want对象包含了一些参数,如selectMusicIndex。如果你想在onContinue中获取这些参数,你需要修改onContinue方法的定义,使其能够接收这些参数。

此外,onContinue方法应该返回一个AbilityConstant.OnContinueResult枚举值,表示是否同意继续这个Ability。

下面是一个修改后的onContinue方法的示例,它可以接收并保存wantParam中的参数:

onContinue(wantParam: Want): AbilityConstant.OnContinueResult {
    // 保存wantParam中的参数
    this.selectMusicIndex = wantParam.parameters?.selectMusicIndex;

    // 返回AGREE表示同意继续这个Ability
    return AbilityConstant.OnContinueResult.AGREE;
}

在这个示例中,我假设selectMusicIndex是你想要保存的参数,并且你的类有一个名为selectMusicIndex的属性来保存这个值。你需要根据你的实际情况来修改这个代码。

请注意,onContinue方法在被调用时,会传入一个Want对象,这个对象包含了启动这个Ability时所使用的所有参数。因此,你可以从这个对象中获取你需要的参数。

最后,如果你的onContinue方法定义正确,但仍然收到错误码401,那么可能是其他原因导致的。你可能需要进一步检查你的代码,或者查看OpenHarmony的官方文档和社区,以获取更多的帮助。

1 个回答

在这种情况下,onContinue是否需要保存参数取决于你的具体业务需求。如果在后续的业务逻辑中需要用到这些参数,那么可以在 onContinue中进行保存。以下是一个示例,展示如何在 onContinue中处理参数保存:

onContinue(wantParam: Record<string, number>): AbilityConstant.OnContinueResult {
   AppStorage.set('passedParameters', wantParam);
   return AbilityConstant.OnContinueResult.AGREE;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进