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