鴻蒙OS 通知開發(fā)指導(dǎo)

2020-09-18 11:15 更新

場景介紹

HarmonyOS 提供了通知功能,即在一個應(yīng)用的 UI 界面之外顯示的消息,主要用來提醒用戶有來自該應(yīng)用中的信息。當(dāng)應(yīng)用向系統(tǒng)發(fā)出通知時,它將先以圖標(biāo)的形式顯示在通知欄中,用戶可以下拉通知欄查看通知的詳細(xì)信息。常見的使用場景:

  • 顯示接收到短消息、即時消息等。
  • 顯示應(yīng)用的推送消息,如廣告、版本更新等。
  • 顯示當(dāng)前正在進(jìn)行的事件,如播放音樂、導(dǎo)航、下載等。

接口說明

通知相關(guān)基礎(chǔ)類包含 [ NotificationSlot ]、[ NotificationRequest ]和[ NotificationHelper ]?;A(chǔ)類之間的關(guān)系如下所示:

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

img

  • NotificationSlot

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

說明

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

不指定 NotificationSlot 時,當(dāng)前通知會使用默認(rèn)的 NotificationSlot,默認(rèn)的 NotificationSlot 優(yōu)先級為 LEVEL_DEFAULT 。

接口名 描述
NotificationSlot(String id, String name, int level) 構(gòu)造 NotificationSlot。
setLevel(int level) 設(shè)置 NotificationSlot 的級別。
setName(String name) 設(shè)置 NotificationSlot 的命名。
setDescription(String description) 設(shè)置 NotificationSlot 的描述信息。
enableBypassDnd(boolean bypassDnd) 設(shè)置是否繞過系統(tǒng)的免打擾模式。
setEnableVibration(boolean vibration) 設(shè)置收到通知時是否使能振動。
setLockscreenVisibleness(int visibleness) 設(shè)置在鎖屏場景下,收到通知后是否顯示,以及顯示的效果。
setEnableLight(boolean isLightEnabled) 設(shè)置收到通知時是否開啟呼吸燈,前提是當(dāng)前硬件支持呼吸燈。
setLedLightColor(int color) 設(shè)置收到通知時的呼吸燈顏色。
setSlotGroup(String groupId) 綁定當(dāng)前 NotificationSlot 到一個 NotificationSlot 組。

NotificationSlot 的級別目前支持如下幾種, 由低到高:

  • LEVEL_NONE: 表示通知不發(fā)布。
  • LEVEL_MIN:表示通知可以發(fā)布,但是不顯示在通知欄,不自動彈出,無提示音;該級別不適用于前臺服務(wù)的場景。
  • LEVEL_LOW:表示通知可以發(fā)布且顯示在通知欄,不自動彈出,無提示音。
  • LEVEL_DEFAULT:表示通知發(fā)布后可在通知欄顯示,不自動彈出,觸發(fā)提示音。
  • LEVEL_HIGH:表示通知發(fā)布后可在通知欄顯示,自動彈出,觸發(fā)提示。

  • NotificationRequest

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

接口名 描述
NotificationRequest() 構(gòu)建一個通知。
NotificationRequest(int notificationId) 構(gòu)建一個通知,指定通知的id。通知的Id在應(yīng)用內(nèi)容具有唯一性,如果不指定,默認(rèn)為0。
setNotificationId(int notificationId) 設(shè)置當(dāng)前通知id。
setAutoDeletedTime(long time) 設(shè)置通知自動取消的時間戳。
setContent(NotificationRequest.NotificationContent content) 設(shè)置通知的具體類型。
setCreateTime(long createTime) 設(shè)置通知的創(chuàng)建的時間戳。
setDeliveryTime(long deliveryTime) 設(shè)置通知分發(fā)的時間戳。
setSlotId(String slotId) 設(shè)置通知的 NotificationSlot id。
setTapDismissed(boolean tapDismissed) 設(shè)置通知在用戶點擊后是否自動取消。
setLittleIcon(PixelMap smallIcon) 設(shè)置通知的小圖標(biāo),在通知左上角顯示。
setBigIcon(PixelMap bigIcon) 設(shè)置通知的大圖標(biāo),在通知的右邊顯示。
setGroupValue(String groupValue) 設(shè)置分組通知,相同分組的通知在通知欄顯示時,將會折疊在一組應(yīng)用中顯示。
addActionButton(NotificationActionButton actionButton) 設(shè)置通知添加通知 ActionButton。
setIntentAgent(IntentAgent agent) 設(shè)置通知承載指定的 IntentAgent,在通知中實現(xiàn)即將觸發(fā)的事件。

具體的通知類型:目前支持六種類型,包括普通文本 NotificationNormalContent、長文本 NotificationLongTextContent、圖片 NotificationPictureContent、多行 NotificationMultiLineContent、社交 NotificationConversationalContent、媒體 NotificationMediaContent。

類名 接口名 描述
NotificationNormalContent setTitle(String title) 設(shè)置通知標(biāo)題。
NotificationNormalContent setText(String text) 設(shè)置通知內(nèi)容。
NotificationNormalContent setAdditionalText(String additionalText) 設(shè)置通知次要內(nèi)容,是對通知內(nèi)容的補充。
NotificationPictureContent setBriefText(String briefText) 設(shè)置通知概要內(nèi)容,是對通知內(nèi)容的總結(jié)。
NotificationPictureContent setExpandedTitle(String expandedTitle) 設(shè)置通知一旦設(shè)置了,折疊時顯示setTitle(String)的值,展開時當(dāng)前設(shè)置的展開標(biāo)題。
NotificationPictureContent setBigPicture(PixelMap bigPicture) 設(shè)置通知的圖片內(nèi)容,附加在setText(String text)下方。
NotificationLongTextContent setLongText(String longText) 設(shè)置通知的長文本。
NotificationConversationalContent setConversationTitle(String conversationTitle) 設(shè)置社交通知的標(biāo)題。
NotificationConversationalContent addConversationalMessage(ConversationalMessage message) 通知添加一條消息。
NotificationMultiLineContent addSingleLine(String line) 在當(dāng)前通知中添加一行文本。
NotificationMediaContent setAVToken(AVToken avToken) 將媒體通知綁定指定的AVToken。
NotificationMediaContent setShownActions(int[] actions) 設(shè)置媒體通知待展示的按鈕。

說明

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

  • NotificationHelper

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

接口名 描述
publishNotification(NotificationRequest request) 發(fā)布一條通知。
publishNotification(String tag, NotificationRequest) 發(fā)布一條帶TAG的通知。
cancelNotification(int notificationId) 取消指定的通知。
cancelNotification(String tag, int notificationId) 取消指定的帶 TAG 的通知。
cancelAllNotifications() 取消之前發(fā)布的所有通知。
addNotificationSlot(NotificationSlot slot) 創(chuàng)建一個 NotificationSlot。
getNotificationSlot(String slotId) 獲取 NotificationSlot。
removeNotificationSlot(String slotId) 刪除一個 NotificationSlot。
getActiveNotifications() 獲取當(dāng)前應(yīng)用發(fā)的活躍通知。
getActiveNotificationNums() 獲取系統(tǒng)中當(dāng)前應(yīng)用發(fā)的活躍通知的數(shù)量。
setNotificationBadgeNum(int num) 設(shè)置通知的角標(biāo)。
setNotificationBadgeNum() 設(shè)置當(dāng)前應(yīng)用中活躍狀態(tài)通知的數(shù)量在角標(biāo)顯示。

開發(fā)步驟

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

創(chuàng)建NotificationSlot

NotificationSlot 可以設(shè)置公共通知的震動,鎖屏模式,重要級別等,并通過調(diào)用 NotificationHelper.addNotificationSlot() 發(fā)布 NotificationSlot 對象。

NotificationSlot slot = new NotificationSlot("slot_001","slot_default", NotificationSlot.LEVEL_MIN); // 創(chuàng)建notificationSlot對象
slot.setDescription("NotificationSlotDescription");
slot.setEnableVibration(true); // 設(shè)置振動提醒
slot.setLockscreenVisibleness(NotificationRequest.VISIBLENESS_TYPE_PUBLIC);//設(shè)置鎖屏模式
slot.setEnableLight(true); // 設(shè)置開啟呼吸燈提醒
slot.setLedLightColor(Color.RED.getValue());// 設(shè)置呼吸燈的提醒顏色
try {
   NotificationHelper.addNotificationSlot(slot);
} catch (RemoteException ex) {
   HiLog.warn(LABEL, "addNotificationSlot occur exception.");
}

發(fā)布通知

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

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

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

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

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

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

取消通知

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

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

  int notificationId = 1;
  try {
      NotificationHelper.cancelNotification(notificationId);
  } catch (RemoteException ex) {
      HiLog.warn(LABEL, "cancelNotification occur exception.");
  }

  • 調(diào)用 cancelAllNotifications() 取消所有通知。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號