• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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