UIAbility 第三弹:基于Want的UIAbility间通信技术实现
·
这一节我们讨论OpenHarmony中UIAbility如何获取拉起方信息,并已经给出了实际场景和代码示例。现在附上官方文档链接,方便各位同学深入学习。
核心方法:通过 want 对象获取
当 UIAbility 被拉起时,系统会在 onCreate() 生命周期回调中传递一个 Want 对象,该对象包含调用方的详细信息。
步骤:
- 在 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 启动');
}
}
}
关键字段说明
|
字段 |
说明 |
|
|
调用方的应用包名(如 |
|
|
调用方的 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: '处理后的数据'
}
}
});
注意事项
- 权限控制
如需获取敏感信息,请在module.json5中声明权限:
"requestPermissions": [
{
"name": "ohos.permission.GET_BUNDLE_INFO"
}
]
- 空值处理
部分场景下bundleName可能为空(如桌面图标启动),需添加判空逻辑:
const caller = want.bundleName || '未知来源';
- 跨设备标识
跨设备启动时,设备 ID 会包含在want中:
const deviceId = want.parameters.deviceId;
通过解析 Want 对象,可准确识别调用方身份、传递参数及启动场景,实现不同业务逻辑的分支处理。
更多推荐
所有评论(0)