如果我们希望用户点击通知栏消息时,添加一些自定义行为,例如拉起应用内的特定页面或者发送广播等。在 HarmonyOS 中,提供了 WantAgent 机制,可以将行为意图封装到通知中,当用户点击通知时触发相应的操作。
实现原理
- 开发者将想要触发的行为封装成 WantAgent 对象,例如拉起应用组件或发送广播事件。
- 将 WantAgent 对象添加到 NotificationRequest 对象中。
- 使用 NotificationManager 发布带有 WantAgent 的通知。
- 用户在设备上点击通知时,系统会解析通知中包含的 WantAgent 并执行相应的操作。
开发步骤
1、导入模块
首先,我们需要导入必要的模块:
import NotificationManager from '@ohos.notificationManager';
import wantAgent from '@ohos.app.ability.wantAgent';
2、创建WantAgentInfo信息
我们需要根据想要实现的行为创建对应的 WantAgentInfo 对象,例如拉起 Ability 或发送公共事件。
场景一:拉起 Ability
let wantAgentObj = null;
let wantAgentInfo = {
wants: [
{
deviceId: '',
bundleName: 'com.example.test', // 目标应用包名
abilityName: 'com.example.test.MainAbility', // 目标 Ability 名称
action: '',
entities: [],
uri: '',
parameters: {}
}
],
operationType: wantAgent.OperationType.START_ABILITY, // 设置操作类型为拉起 Ability
requestCode: 0,
wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG]
}
场景二:发送公共事件
let wantAgentObj = null;
let wantAgentInfo = {
wants: [
{
action: 'event_name', // 设置事件名
parameters: {},
}
],
operationType: wantAgent.OperationType.SEND_COMMON_EVENT, // 设置操作类型为发送公共事件
requestCode: 0,
wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG],
}
3、创建WantAgent
使用 wantAgent.getWantAgent() 方法根据 WantAgentInfo 创建 WantAgent 对象:
wantAgent.getWantAgent(wantAgentInfo, (err, data) => {
if (err) {
console.error('[WantAgent]getWantAgent err=' + JSON.stringify(err));
} else {
console.info('[WantAgent]getWantAgent success');
wantAgentObj = data; // 保存创建成功的 WantAgent 对象
}
});
4、构造NotificationRequest对象
将创建好的 WantAgent 对象添加到 NotificationRequest 对象中:
let notificationRequest = {
content: {
contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
normal: {
title: 'Test_Title',
text: 'Test_Text',
additionalText: 'Test_AdditionalText',
},
},
id: 1,
label: 'TEST',
wantAgent: wantAgentObj, // 设置 WantAgent
}
5、发布WantAgent通知
最后,使用 NotificationManager.publish() 方法发布带有 WantAgent 的通知:
NotificationManager.publish(notificationRequest, (err) => {
if (err) {
console.error(`[ANS] failed to publish, error[${err}]`);
return;
}
console.info(`[ANS] publish success `);
});
完成以上步骤后,当用户点击通知栏上的该条通知时,系统就会自动触发预设的 WantAgent 行为,例如拉起指定的应用页面或者发送广播事件。
完整示例代码
import NotificationManager from '@ohos.notificationManager';
import WantAgent from '@ohos.app.ability.wantAgent'; // 修改导入以符合常见JS模块导入规范
// 定义wantAgent的配置信息
const wantAgentConfig = {
wants: [
{
deviceId: '',
bundleName: 'com.example.test',
abilityName: 'com.example.test.MainAbility',
action: '',
entities: [],
uri: '',
parameters: {}
}
],
operationType: WantAgent.OperationType.START_ABILITY,
requestCode: 0,
wantAgentFlags: [WantAgent.WantAgentFlags.CONSTANT_FLAG]
};
// 获取WantAgent实例
WantAgent.getWantAgent(wantAgentConfig, (error, wantAgentInstance) => {
if (error) {
console.error('[WantAgent] Error retrieving WantAgent:', JSON.stringify(error));
return;
}
console.info('[WantAgent] Successfully retrieved WantAgent');
// 定义通知请求
const notificationRequest = {
content: {
contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
normal: {
title: 'Test Title',
text: 'Test Text',
additionalText: 'Test Additional Text',
},
},
id: 1,
label: 'TEST',
wantAgent: wantAgentInstance, // 使用获取到的WantAgent实例
};
// 发布通知
NotificationManager.publish(notificationRequest, (publishError) => {
if (publishError) {
console.error(`[NotificationManager] Failed to publish notification: ${publishError}`);
return;
}
console.info('[NotificationManager] Notification published successfully');
});
});