codecamp

为通知添加行为意图

WantAgent提供了封装行为意图的能力,这里所说的行为意图主要是指拉起指定的应用组件及发布公共事件等能力。HarmonyOS支持以通知的形式,将WantAgent从发布方传递至接收方,从而在接收方触发WantAgent中指定的意图。例如,在通知消息的发布者发布通知时,通常期望用户可以通过通知栏点击拉起目标应用组件。为了达成这一目标,开发者可以将WantAgent封装至通知消息中,当系统接收到WantAgent后,在用户点击通知栏时触发WantAgent的意图,从而拉起目标应用组件。

为通知添加行为意图的实现方式如下图所示:发布通知的应用向应用组件管理服务AMS(Ability Manager Service)申请WantAgent,然后随其他通知信息一起发送给桌面,当用户在桌面通知栏上点击通知时,触发WantAgent动作。

图1 携带行为意图的通知运行机制

接口说明

具体接口描述,详见WantAgent接口文档

接口名

描述

getWantAgent(info: WantAgentInfo, callback: AsyncCallback<WantAgent>): void

创建WantAgent。

trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback<CompleteData>): void

触发WantAgent意图。

cancel(agent: WantAgent, callback: AsyncCallback<void>): void

取消WantAgent。

getWant(agent: WantAgent, callback: AsyncCallback<Want>): void

获取WantAgent的want。

equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback<boolean>): void

判断两个WantAgent实例是否相等。

开发步骤

  1. 导入模块。

    1. import NotificationManager from '@ohos.notificationManager';
    2. import wantAgent from '@ohos.app.ability.wantAgent';
  2. 创建WantAgentInfo信息。

    场景一:创建拉起Ability的WantAgent的WantAgentInfo信息。

    1. let wantAgentObj = null; // 用于保存创建成功的wantAgent对象,后续使用其完成触发的动作。
    2. // 通过WantAgentInfo的operationType设置动作类型。
    3. let wantAgentInfo = {
    4. wants: [
    5. {
    6. deviceId: '',
    7. bundleName: 'com.example.test',
    8. abilityName: 'com.example.test.MainAbility',
    9. action: '',
    10. entities: [],
    11. uri: '',
    12. parameters: {}
    13. }
    14. ],
    15. operationType: wantAgent.OperationType.START_ABILITY,
    16. requestCode: 0,
    17. wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG]
    18. }

    场景二:创建发布公共事件的WantAgent的WantAgentInfo信息。

    1. let wantAgentObj = null; // 用于保存创建成功的WantAgent对象,后续使用其完成触发的动作。
    2. // wantAgentInfo
    3. let wantAgentInfo = {
    4. wants: [
    5. {
    6. action: 'event_name', // 设置事件名。
    7. parameters: {},
    8. }
    9. ],
    10. operationType: wantAgent.OperationType.SEND_COMMON_EVENT,
    11. requestCode: 0,
    12. wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG],
    13. }
  3. 创建WantAgent。

    1. // 创建WantAgent
    2. wantAgent.getWantAgent(wantAgentInfo, (err, data) => {
    3. if (err) {
    4. console.error('[WantAgent]getWantAgent err=' + JSON.stringify(err));
    5. } else {
    6. console.info('[WantAgent]getWantAgent success');
    7. wantAgentObj = data;
    8. }
    9. });
  4. 构造NotificationRequest对象。

    1. // 构造NotificationRequest对象
    2. let notificationRequest = {
    3. content: {
    4. contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
    5. normal: {
    6. title: 'Test_Title',
    7. text: 'Test_Text',
    8. additionalText: 'Test_AdditionalText',
    9. },
    10. },
    11. id: 1,
    12. label: 'TEST',
    13. wantAgent: wantAgentObj,
    14. }
  5. 发布WantAgent通知。

    1. // 通知发送
    2. NotificationManager.publish(notificationRequest, (err) => {
    3. if (err) {
    4. console.error(`[ANS] failed to publish, error[${err}]`);
    5. return;
    6. }
    7. console.info(`[ANS] publish success `);
    8. });
  6. 用户通过点击通知栏上的通知,即可触发WantAgent的动作。

发布进度条类型通知
使用AVPlayer开发音频播放功能
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
HAR

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }