这一节我们讨论OpenHarmony中UIAbility如何获取拉起方信息,并已经给出了实际场景和代码示例。现在附上官方文档链接,方便各位同学深入学习。

华为开发者学堂

核心方法:通过 want 对象获取

当 UIAbility 被拉起时,系统会在 onCreate() 生命周期回调中传递一个 Want 对象,该对象包含调用方的详细信息。

步骤:
  1. 在 UIAbility 的 onCreate() 中接收 Want 对象
import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    // 1. 获取调用方的包名
    const callerBundleName = want.bundleName;
    console.log(`拉起方包名: ${callerBundleName}`);

    // 2. 获取调用方的 Ability 名称
    const callerAbilityName = want.abilityName;
    console.log(`拉起方Ability名称: ${callerAbilityName}`);

    // 3. 获取传递的额外参数
    const parameters = want.parameters;
    const callerData = parameters.keyCallerData; // 示例键名
    console.log(`传递的参数: ${JSON.stringify(parameters)}`);

    // 4. 获取调用方的模块名(如果适用)
    const moduleName = want.moduleName;
    console.log(`模块名: ${moduleName}`);

    // 5. 判断启动类型
    const launchReason = launchParam.launchReason;
    if (launchReason === AbilityConstant.LaunchReason.START_ABILITY) {
      console.log('通过 ability 启动');
    }
  }
}

关键字段说明

字段

说明

want.bundleName

调用方的应用包名(如 com.example.callerapp

want.abilityName

调用方的 Ability 名称(如 EntryAbility

want.parameters

调用方传递的额外参数(键值对形式)

want.moduleName

调用方所属的模块名(适用于多模块场景)

launchParam.launchReason

启动原因(如 START_ABILITY 表示由 Ability 拉起)


高级场景

1. 通过 隐式启动 获取调用信息

如果通过 action 隐式启动,可通过 want.action 判断来源:

if (want.action === 'ohos.want.action.searchData') {
  console.log('通过搜索功能拉起');
}
2. 获取 系统组件 的拉起信息

当被系统应用(如通知栏)拉起时,bundleName 可能为系统标识:

if (callerBundleName === 'com.ohos.systemui') {
  console.log('从系统通知拉起');
}
3. 使用 startAbilityForResult 的场景

当调用方使用 startAbilityForResult() 拉起时,可在 onResult() 中返回数据:

// 被拉起的 UIAbility 结束时返回结果
this.context.terminateSelfWithResult({
  resultCode: 0,
  want: {
    parameters: {
      resultKey: '处理后的数据'
    }
  }
});

注意事项

  1. 权限控制
    如需获取敏感信息,请在 module.json5 中声明权限:
"requestPermissions": [
  {
    "name": "ohos.permission.GET_BUNDLE_INFO"
  }
]
  1. 空值处理
    部分场景下 bundleName 可能为空(如桌面图标启动),需添加判空逻辑:
const caller = want.bundleName || '未知来源';
  1. 跨设备标识
    跨设备启动时,设备 ID 会包含在 want 中:
const deviceId = want.parameters.deviceId;

通过解析 Want 对象,可准确识别调用方身份、传递参数及启动场景,实现不同业务逻辑的分支处理。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐