[ 鸿蒙应用开发 ] Want 信息传递的载体

一/Want是什么

Want是对象间信息传递的载体,可以用于应用组件间的信息传递。

“Want”可理解为一种“想要”执行某个操作或启动某个组件的意图表达。封装了目标组件的身份信息、操作命令以及需要传递的数据,决定了哪个组件接收信息、要做什么以及怎么做。也许正是因为它代表了应用或组件之间一种“想要”进行交互、通信和协作的诉求,所以被命名为“Want”。

二/Want的使用场景

作为startAbility的参数,其包含了指定的启动目标,以及启动时需携带的相关数据,例如bundleName和abilityName字段分别指明目标Ability所在应用的包名以及对应包内的Ability名称。当UIAbilityA需要启动UIAbilityB并传入一些数据时,可使用Want作为载体将这些数据传递给UIAbilityB。

0.1在拉起方通过context.startAbility(Want)拉起另一个Ability

Button('拉起同一个模块内的不同Ability')
        .onClick( () => {
          const cxt : common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext
          const wantInfo:Want={
            bundleName:'com.example.zhihureview',
            abilityName:'PntryAbility',
            parameters:{
              key:'from entryability to pntryability',
              info:'happy'
            }
          }
          cxt.startAbility(wantInfo)
        })

0.2在被拉起方的生命周期里面打印日志

export default class PntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(DOMAIN, 'pntryAbility', '%{public}s', 'Ability onCreate');
    const wantInfo = want.parameters;
    hilog.info(DOMAIN, 'want-onCreate', 'key: %{public}s , info:%{public}s', wantInfo?.key, wantInfo?.info);
  }

  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    const wantInfo = want.parameters;
    hilog.info(DOMAIN, 'want-onNewWant', 'key: %{public}s , info:%{public}s', wantInfo?.key, wantInfo?.info);
  }

三/判断App的启动来源

调用方无需手动传递parameters参数,系统会自动向Want对象中传递调用方信息。

通过startAbility()启动应用时,Want参数中的parameters属性可以携带拉起方的信息。系统在parameters中提供了一些预置的key,例如,可以通过ohos.aafwk.param.callerBundleName获取拉起方的 BundleName。

export default class UIAbilityB extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 调用方无需手动传递parameters参数,系统会自动向Want对象中传递调用方信息。
    console.log(`onCreate, callerPid: ${want.parameters?.['ohos.aafwk.param.callerPid']}.`);
    console.log(`onCreate, callerBundleName: ${want.parameters?.['ohos.aafwk.param.callerBundleName']}.`);
    console.log(`onCreate, callerAbilityName: ${want.parameters?.['ohos.aafwk.param.callerAbilityName']}.`);
  }

你可能感兴趣的:(鸿蒙复习,harmonyos,华为)