鴻蒙OS 創(chuàng)建應用通知開發(fā)指導

2020-09-18 18:02 更新

接口介紹

通知相關(guān)基礎類包含 [NotificationSlot]、[NotificationRequest] 和 [NotificationHelper]。詳細的接口信息請參考通知開發(fā)指導?;A類之間的關(guān)系如下所示:

圖1 通知基礎類關(guān)系圖

img

  • NotificationSlot

NotificationSlot 可以對提示音、振動和重要級別等進行設置。一個應用可以創(chuàng)建一個或多個 NotificationSlot,在發(fā)送通知時,通過綁定不同的 NotificationSlot,實現(xiàn)不同用途。

說明

NotificationSlot 需要先通過 NotificationHelper 的 addNotificationSlot (NotificationSlot)方法發(fā)布后,通知才能綁定使用;所有綁定該 NotificationSlot 的通知在發(fā)布后都具備相應的特性,對象在創(chuàng)建后,將無法更改其設置屬性,對于是否啟動相應設置,用戶有最終控制權(quán)。

不指定 NotificationSlot 時,當前通知會使用默認的 NotificationSlot,默認的 NotificationSlot 優(yōu)先級為 LEVEL_DEFAULT,聲音為系統(tǒng)默認提示音。

NotificationSlot 的級別目前支持如下幾種:

  • LEVEL_NONE: 表示通知不發(fā)布。
  • LEVEL_MIN/LEVEL_LOW/LEVEL_DEFAULT/LEVEL_HIGH:表示通知發(fā)布后可在通知中心顯示,自動彈出,觸發(fā)提示音。

  • NotificationRequest

NotificationRequest 用于設置具體的通知對象,包括設置通知的屬性,如:通知的小圖標、自動刪除等參數(shù),以及設置具體的通知類型,如普通文本、長文本等。

通知的常用屬性:

  • 小圖標

點擊放大

標識說明:img為通過 NotificationRequest.setLittleIcon(PixelMap)設置的小圖標。

  • 從通知啟動 Ability:點擊通知欄的通知,可以通過啟動 Ability,觸發(fā)新的事件。

通知設置 NotificationRequest 的 setIntentAgent(IntentAgent) 后,點擊通知欄上發(fā)布的通知,將觸發(fā)通知中的 IntentAgent 承載的事件。IntentAgent 的設置請參考IntentAgent開發(fā)指導。

  • 通知設置 ActionButton:通過點擊通知按鈕,可以觸發(fā)按鈕承載的事件。

點擊放大

標識說明:img、img為兩個通過 NotificationRequest.addActionButton(NotificationActionButton)設置的通知附加按鈕,點擊按鈕后可以觸發(fā)相關(guān)的事件,具體事件內(nèi)容如何設置需要參考 NotificationActionButton。

具體的通知類型:目前支持三種類型,包括普通文本 NotificationNormalContent、長文本 NotificationLongTextContent、圖片 NotificationPitctureContent。

  • 普通文本通知樣式(NotificationNormalContent)

點擊放大

標識說明:img為通知的標題,通過 NotificationNormalContent.setTitle(String)設置。img為通知的內(nèi)容,通過NotificationNormalContent.setText(String)設置。通知標題和內(nèi)容至少要設置一個。

  • 長文本通知樣式(NotificationLongTextContent)

點擊放大

標識說明:img為通知的長文本,通過 NotificationLongTextContent.setLongText(String) 設置,文本長度最大支持1024個字符。

  • 圖片通知樣式(NotificationPictureContent)

點擊放大

標識說明:img 為圖片通知樣式的圖片,通過NotificationPictureContent.setBigPicture(PixelMap bigPicture)設置。

說明

通知發(fā)布后,通知的設置不可修改。如果下次發(fā)布通知使用相同的ID,就會更新之前發(fā)布的通知。

  • NotificationHelper

NotificationHelper封裝了發(fā)布、更新、訂閱、刪除通知等靜態(tài)方法。訂閱通知、退訂通知和查詢系統(tǒng)中所有處于活躍狀態(tài)的通知,有權(quán)限要求需為系統(tǒng)應用或具有訂閱者權(quán)限。

開發(fā)步驟

通知的開發(fā)指導分為創(chuàng)建NotificationSlot、發(fā)布通知和取消通知等開發(fā)場景。

創(chuàng)建NotificationSlot

NotificationSlot可以設置公共通知的提示聲等,并通過調(diào)用NotificationHelper.addNotificationSlot()發(fā)布NotificationSlot對象。

// 創(chuàng)建notificationSlot對象
NotificationSlot slot = new NotificationSlot("slot_001","slot_default", NotificationSlot.LEVEL_DEFAULT); 
slot.setDescription("NotificationSlotDescription");
try {
    NotificationHelper.addNotificationSlot(slot);
} catch (RemoteException ex) {
    HiLog.warn(LABEL, "addNotificationSlot occur exception.");
}

發(fā)布通知

  1. 構(gòu)建 NotificationRequest 對象,應用發(fā)布通知前,通過 NotificationRequet 的 setSlot() 方法與 NotificationSlot 綁定,使該通知在發(fā)布后都具備該對象的特征。

   int notification_id = 1;
   NotificationRequest request = new NotificationRequest(notification_id);
   request.setSlotId(slot.getId());

  1. 調(diào)用 setContent() 設置通知的內(nèi)容。

   String title = "title";
   String text = "There is a normal notification content.";
   NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent();
   content.setTitle(title)
          .setText(text);
   NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);
   // 設置通知的小圖標
   request.setLittleIcon(PixelMap); 
   // 設置通知的內(nèi)容
   request.setContent(notificationContent); 

  1. 調(diào)用 setIntentAgent() 設置通知可以觸發(fā)的事件。

   // 指定要啟動的ability的ElementName字段
   ElementName elementName = new ElementName("", "com.example.testintentagent", "com.example.testintentagent.IntentAgentAbility");
   // 將ElementName字段添加到Intent中
   Intent intent = new Intent();
   intent.setElement(elementName);
   List<Intent> intentList = new ArrayList<>();
   intentList.add(intent);
   // 指定啟動一個有頁面的ability
   IntentAgentInfo intenAgentinfo = new IntentAgentInfo(request.getNotificationId(), IntentAgentConstant.OperationType.START_ABILITY, IntentAgentConstant.Flags.UPDATE_PRESENT_FLAG, intentList, null);
   // 獲取IntentAgent實例
   IntentAgent intentAgent = IntentAgentHelper.getIntentAgent(mContext, intenAgentinfo);
   request.setIntentAgent(intentAgent);
   request.setTapDismissed(true);

  1. 調(diào)用 publishNotification() 發(fā)送通知。

   try {
      NotificationHelper.publishNotification(request);
   } catch (RemoteException ex) {
      HiLog.warn(LABEL, "publishNotification occur exception.");
   }

取消通知

取消通知分為取消指定單條通知和取消所有通知,應用只能取消自己發(fā)布的通知。

  • 調(diào)用 cancelNotification() 取消指定的單條通知。

  int notification_id = 1;
  try {
      NotificationHelper.cancelNotification(notification_id);
  } catch (RemoteException ex) {
      HiLog.warn(LABEL, "cancelNotification occur exception.");
  }
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號