為通知添加行為意圖

2024-02-16 13:51 更新

WantAgent提供了封裝行為意圖的能力,這里所說的行為意圖主要是指拉起指定的應(yīng)用組件及發(fā)布公共事件等能力。HarmonyOS支持以通知的形式,將WantAgent從發(fā)布方傳遞至接收方,從而在接收方觸發(fā)WantAgent中指定的意圖。例如,在通知消息的發(fā)布者發(fā)布通知時(shí),通常期望用戶可以通過通知欄點(diǎn)擊拉起目標(biāo)應(yīng)用組件。為了達(dá)成這一目標(biāo),開發(fā)者可以將WantAgent封裝至通知消息中,當(dāng)系統(tǒng)接收到WantAgent后,在用戶點(diǎn)擊通知欄時(shí)觸發(fā)WantAgent的意圖,從而拉起目標(biāo)應(yīng)用組件。

為通知添加行為意圖的實(shí)現(xiàn)方式如下圖所示:發(fā)布通知的應(yīng)用向應(yīng)用組件管理服務(wù)AMS(Ability Manager Service)申請(qǐng)WantAgent,然后隨其他通知信息一起發(fā)送給桌面,當(dāng)用戶在桌面通知欄上點(diǎn)擊通知時(shí),觸發(fā)WantAgent動(dòng)作。

圖1 攜帶行為意圖的通知運(yùn)行機(jī)制

接口說明

具體接口描述,詳見WantAgent接口文檔。

接口名

描述

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

創(chuàng)建WantAgent。

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

觸發(fā)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

判斷兩個(gè)WantAgent實(shí)例是否相等。

開發(fā)步驟

  1. 導(dǎo)入模塊。

    1. import NotificationManager from '@ohos.notificationManager';
    2. import wantAgent from '@ohos.app.ability.wantAgent';
  2. 創(chuàng)建WantAgentInfo信息。

    場景一:創(chuàng)建拉起Ability的WantAgent的WantAgentInfo信息。

    1. let wantAgentObj = null; // 用于保存創(chuàng)建成功的wantAgent對(duì)象,后續(xù)使用其完成觸發(fā)的動(dòng)作。
    2. // 通過WantAgentInfo的operationType設(shè)置動(dòng)作類型。
    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. }

    場景二:創(chuàng)建發(fā)布公共事件的WantAgent的WantAgentInfo信息。

    1. let wantAgentObj = null; // 用于保存創(chuàng)建成功的WantAgent對(duì)象,后續(xù)使用其完成觸發(fā)的動(dòng)作。
    2. // wantAgentInfo
    3. let wantAgentInfo = {
    4. wants: [
    5. {
    6. action: 'event_name', // 設(shè)置事件名。
    7. parameters: {},
    8. }
    9. ],
    10. operationType: wantAgent.OperationType.SEND_COMMON_EVENT,
    11. requestCode: 0,
    12. wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG],
    13. }
  3. 創(chuàng)建WantAgent。

    1. // 創(chuàng)建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. 構(gòu)造NotificationRequest對(duì)象。

    1. // 構(gòu)造NotificationRequest對(duì)象
    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. 發(fā)布WantAgent通知。

    1. // 通知發(fā)送
    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. 用戶通過點(diǎn)擊通知欄上的通知,即可觸發(fā)WantAgent的動(dòng)作。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)