Adding a WantAgent Object to a Notification

An application requests WantAgent from Ability Kit and encapsulates it into the notification. When a notification is published, the user may tap a message or a button in the notification panel to start the target application or publish a common event.

The following figure shows a notification carrying action buttons.

notification_wantagent

Working Principles

notification_wantagent

Available APIs

API Description
publish(request: NotificationRequest): Promise<void> Publishes a notification.
getWantAgent(info: WantAgentInfo, callback: AsyncCallback<WantAgent>): void Creates a WantAgent object.

How to Develop

  1. Import the modules.

    import { notificationManager } from '@kit.NotificationKit';
    import { wantAgent, WantAgent } from '@kit.AbilityKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    
    const TAG: string = '[PublishOperation]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
  2. Create a WantAgentInfo object.

    Scenario 1: Create a WantAgentInfo object for starting a UIAbility.

    let wantAgentObj: WantAgent | null = null; // Store the created WantAgent object for subsequent trigger actions.
    
    // Set the action type through operationType of WantAgentInfo.
    let wantAgentInfo: wantAgent.WantAgentInfo = {
      wants: [
        {
          deviceId: '',
          bundleName: 'com.sample.eventnotification', // Use the actual bundle name.
          abilityName: 'EntryAbility', // Use the actual ability name.
          action: '',
          entities: [],
          uri: '',
          parameters: {}
        }
      ],
      actionType: wantAgent.OperationType.START_ABILITY,
      requestCode: 0,
      actionFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG]
    };
    

    Scenario 2: Create a WantAgentInfo object for publishing a common event.

    let wantAgentObj: WantAgent | null = null; // Store the created WantAgent object for subsequent trigger actions.
    
    // Set the action type through operationType of WantAgentInfo.
    let wantAgentInfo: wantAgent.WantAgentInfo = {
      wants: [
        {
          action: 'event_name', // Set the action name.
          parameters: {},
        }
      ],
      actionType: wantAgent.OperationType.SEND_COMMON_EVENT,
      requestCode: 0,
      actionFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG],
    };
    
  3. Call getWantAgent() to create a WantAgent object.

    // Create a WantAgent object.
    wantAgent.getWantAgent(wantAgentInfo, (err: BusinessError, data: WantAgent) => {
      if (err) {
        hilog.error(DOMAIN_NUMBER, TAG,
          `Failed to get want agent. Code is ${err.code}, message is ${err.message}`);
        return;
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in getting want agent.');
      wantAgentObj = data;
    
      // ...
    });
    
  4. Create a NotificationRequest object and publish a notification carrying WantAgent.

    NOTE

    • If WantAgent is encapsulated in a notification, WantAgent is triggered when the notification is tapped. If a notification contains action buttons, the buttons are displayed when the notification is tapped and WantAgent is triggered when the notification is tapped again.

    • If WantAgent is encapsulated in the action buttons, the buttons are displayed under the notification when the notification is tapped and WantAgent is triggered when a button is tapped.

    // Create the NotificationActionButton object.
    let actionButton: notificationManager.NotificationActionButton = {
      title: 'open_the_app',
      // Before using wantAgentObj, ensure that a value has been assigned to it (that is, step 3 is performed).
      // WantAgent of the notification buttons
      wantAgent: wantAgentObj!
    };
    
    // Create a NotificationRequest object.
    let notificationRequest: notificationManager.NotificationRequest = {
      content: {
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
        normal: {
          title: 'one_button_notify',
          text: 'Click on this notification twice to open the app',
          additionalText: 'Test_AdditionalText',
        },
      },
      id: 6,
      // WantAgent of the notification
      wantAgent: wantAgentObj!,
      // Action buttons
      actionButtons: [actionButton],
    };
    
    notificationManager.publish(notificationRequest, (err: BusinessError) => {
      if (err) {
        hilog.error(DOMAIN_NUMBER, TAG,
          `Failed to publish notification. Code is ${err.code}, message is ${err.message}`);
        return;
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in publishing notification.');
    });
    

Sample Code