1# 为通知添加行为意图 2 3[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)提供了封装行为意图的能力,该行为意图是指拉起指定的应用组件及发布公共事件等能力。支持以通知的形式,将[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)从发布方传递至接收方,从而在接收方触发[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)中指定的意图。例如在通知消息的发布者发布通知时,通常期望用户可以通过通知栏点击拉起目标应用组件。为了达成这一目标,开发者可以将[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)封装至通知消息中,当系统接收到[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)后,在用户点击通知栏时触发[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)的意图,从而拉起目标应用组件。 4 5为通知添加行为意图的实现方式如下图所示:发布通知的应用向应用组件管理服务AMS(Ability Manager Service)申请[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md),然后随其他通知信息一起发送给桌面,当用户在桌面通知栏上点击通知时,触发[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)动作。 6 7**图1** 携带行为意图的通知运行机制 8![notification-with-wantagent](figures/notification-with-wantagent.png) 9 10 11## 接口说明 12 13具体接口描述,详见[WantAgent接口文档](../reference/apis/js-apis-app-ability-wantAgent.md)。 14 15| **接口名** | **描述** | 16| -------- | -------- | 17| getWantAgent(info: WantAgentInfo, callback: AsyncCallback<WantAgent>): void | 创建WantAgent。 | 18| trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback<CompleteData>): void | 触发WantAgent意图。 | 19| cancel(agent: WantAgent, callback: AsyncCallback<void>): void | 取消WantAgent。 | 20| getWant(agent: WantAgent, callback: AsyncCallback<Want>): void | 获取WantAgent的want。 | 21| equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback<boolean>): void | 判断两个WantAgent实例是否相等。 | 22 23 24## 开发步骤 25 261. [请求通知授权](notification-enable.md),获得用户授权后,才能使用通知功能。 27 282. 导入模块。 29 30 ```typescript 31 import notificationManager from '@ohos.notificationManager'; 32 import wantAgent from '@ohos.app.ability.wantAgent'; 33 import { WantAgent } from '@ohos.app.ability.wantAgent'; 34 import Base from '@ohos.base'; 35 ``` 36 373. 创建WantAgentInfo信息。 38 39 场景一:创建拉起UIAbility的WantAgent的[WantAgentInfo](../reference/apis/js-apis-inner-wantAgent-wantAgentInfo.md)信息。 40 41 ```typescript 42 let wantAgentObj:WantAgent; // 用于保存创建成功的wantAgent对象,后续使用其完成触发的动作。 43 44 // 通过WantAgentInfo的operationType设置动作类型 45 let wantAgentInfo:wantAgent.WantAgentInfo = { 46 wants: [ 47 { 48 deviceId: '', 49 bundleName: 'com.samples.notification', 50 abilityName: 'SecondAbility', 51 action: '', 52 entities: [], 53 uri: '', 54 parameters: {} 55 } 56 ], 57 operationType: wantAgent.OperationType.START_ABILITY, 58 requestCode: 0, 59 wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG] 60 }; 61 ``` 62 63 场景二:创建发布[公共事件](../application-models/common-event-overview.md)的WantAgent的[WantAgentInfo](../reference/apis/js-apis-inner-wantAgent-wantAgentInfo.md)信息。 64 65 ```typescript 66 let wantAgentObj:WantAgent; // 用于保存创建成功的WantAgent对象,后续使用其完成触发的动作。 67 68 // 通过WantAgentInfo的operationType设置动作类型 69 let wantAgentInfo:wantAgent.WantAgentInfo = { 70 wants: [ 71 { 72 action: 'event_name', // 设置事件名 73 parameters: {}, 74 } 75 ], 76 operationType: wantAgent.OperationType.SEND_COMMON_EVENT, 77 requestCode: 0, 78 wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG], 79 }; 80 ``` 81 824. 调用[getWantAgent()](../reference/apis/js-apis-app-ability-wantAgent.md#wantagentgetwantagent)方法进行创建WantAgent。 83 84 ```typescript 85 // 创建WantAgent 86 wantAgent.getWantAgent(wantAgentInfo, (err:Base.BusinessError, data:WantAgent) => { 87 if (err) { 88 console.error(`Failed to get want agent. Code is ${err.code}, message is ${err.message}`); 89 return; 90 } 91 console.info('Succeeded in getting want agent.'); 92 wantAgentObj = data; 93 }); 94 ``` 95 965. 构造NotificationRequest对象,并发布WantAgent通知。 97 98 ```typescript 99 // 构造NotificationRequest对象 100 let notificationRequest: notificationManager.NotificationRequest = { 101 content: { 102 notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, 103 normal: { 104 title: 'Test_Title', 105 text: 'Test_Text', 106 additionalText: 'Test_AdditionalText', 107 }, 108 }, 109 id: 6, 110 label: 'TEST', 111 wantAgent: wantAgentObj, 112 } 113 114 notificationManager.publish(notificationRequest, (err:Base.BusinessError) => { 115 if (err) { 116 console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`); 117 return; 118 } 119 console.info('Succeeded in publishing notification.'); 120 }); 121 ``` 122 1236. 用户通过点击通知栏上的通知,系统会自动触发WantAgent的动作。 124