通知總覽

通知泛指 Android 在您應用程式 UI 以外的位置所顯示的訊息,可為使用者提供提醒內容、其他使用者傳來的通訊內容,或是來自您應用程式的即時資訊。使用者可以輕觸通知來開啟應用程式,或直接透過通知執行動作。

本頁概要說明通知的顯示位置和可用功能。如要開始建構通知,請參閱「建立通知」。

想進一步瞭解通知設計和互動模式,請參閱通知設計指南

在裝置上的顯示樣式

系統會向不同格式的使用者自動顯示通知。 通知會以圖示的形式顯示在狀態列中,通知導覽匣中也會顯示更詳細的項目,應用程式圖示上也會顯示標記。通知也會顯示在已配對的穿戴式裝置上。

狀態列和通知導覽匣

當您發出通知時,通知會先顯示為狀態列中的圖示。

圖 1:顯示在狀態列左側的通知圖示。

使用者可以向下滑動狀態列來開啟通知導覽匣,然後在當中查看更詳細的通知內容,以及執行相關動作。

圖 2. 通知導覽匣中的通知。

使用者可以向下拖曳導覽匣中的通知來展開視圖,藉此顯示更多內容和動作按鈕 (如有提供)。從 Android 13 開始,這個展開的檢視畫麵包含一個按鈕,可讓使用者停止具有前景服務的應用程式

通知導覽匣中的通知會持續顯示,直到由應用程式或使用者關閉為止。

抬頭通知

從 Android 5.0 開始,通知可以短暫顯示在稱為「抬頭通知」的浮動式視窗中。這通常是用來發出使用者必須立刻知道的重要通知,而且這種通知只會在裝置解鎖時顯示。

圖 3. 抬頭通知會顯示在前景應用程式前方。

當應用程式發出通知時,系統會顯示抬頭通知。通知片刻後便會消失,但通知導覽匣中會照常顯示。

可能觸發抬頭通知的條件包括:

  • 使用者的活動是以全螢幕模式進行,例如應用程式使用 fullScreenIntent 時。

  • 在搭載 Android 7.1 (API 等級 25) 以下版本的裝置上,通知擁有高優先順序,會使用鈴聲或震動功能。

  • 在搭載 Android 8.0 (API 級別 26) 以上版本的裝置上,通知管道具有高重要性。

螢幕鎖定

從 Android 5.0 開始,通知可以顯示在螢幕鎖定畫面中。

您可以利用程式輔助方式,設定應用程式張貼的通知是否顯示在安全螢幕鎖定畫面上;如果啟用,還可以顯示詳細程度。

使用者可以使用系統設定來選擇螢幕鎖定畫面通知的內容詳細程度,或是停用所有的螢幕鎖定畫面通知。從 Android 8.0 開始,使用者可以為每個通知管道停用或啟用螢幕鎖定畫面通知。

圖 4. 顯示在螢幕鎖定畫面中的通知,系統已隱藏通知中的敏感內容。

詳情請參閱「設定螢幕鎖定瀏覽權限」。

應用程式圖示上的標記

在搭載 Android 8.0 (API 等級 26) 及以上版本的裝置所支援的啟動器中,應用程式圖示會在對應的應用程式啟動器圖示上顯示彩色的標記 (稱為「通知圓點」),藉此指出新的通知。

使用者可以按住應用程式圖示,查看該應用程式的通知。使用者可以從選單中關閉或處理通知,與通知導覽匣類似。

圖 5. 通知標記和按住選單。

如要進一步瞭解標記的運作方式,請參閱「修改通知標記」。

Wear OS 裝置

如果使用者擁有已配對的 Wear OS 裝置,則所有通知都會自動顯示在該裝置上,包括可展開的詳細資料和動作按鈕。

您可以自訂通知在穿戴式裝置上的外觀,並提供各種操作選項 (包括建議的回覆內容,以及透過語音輸入回覆),藉此提升使用者體驗。詳情請參閱如何為穿戴式裝置專用功能新增通知

圖 6. 通知會自動顯示在已配對的 Wear OS 裝置上。

通知剖析

通知的設計是由系統範本決定,您的應用程式會定義範本中每個部分的內容。通知的某些詳細資料只會顯示在展開後的檢視畫面中。

圖 7. 顯示基本詳細資料的通知。

圖 7 為通知中最常見的部分,如下所示:

  1. 小型圖示:必要;使用 setSmallIcon() 設定。
  2. 應用程式名稱:由系統提供。
  3. 時間戳記:由系統提供,但您可以使用 setWhen() 覆寫,或使用 setShowWhen(false) 將其隱藏。
  4. 大型圖示:選用;通常只用於聯絡人相片。 請勿將其用於您的應用程式圖示。請使用 setLargeIcon() 進行設定。
  5. 標題:選用;使用 setContentTitle() 設定。
  6. 文字:選用;使用 setContentText() 設定。

強烈建議您使用系統範本,以確保在所有裝置上都能相容。如有需要,您可以建立自訂通知版面配置

如要進一步瞭解如何建立包含上述功能和其他內容的通知,請參閱「建立通知」。

通知動作

雖然並非必要,但建議您讓每則通知在使用者輕觸時開啟適當的應用程式活動。除了這項預設的通知動作之外,您也可以新增動作按鈕,以便從通知中完成應用程式相關工作 (而且通常不用開啟活動),如圖 8 所示。

圖 8. 含有動作按鈕的通知。

從 Android 7.0 (API 等級 24) 開始,您可以新增動作讓使用者回覆訊息,或是直接在通知中輸入其他文字。

從 Android 10 (API 級別 29) 開始,平台可自動產生動作按鈕,其中包含建議的意圖動作。

如要進一步瞭解新增動作按鈕,請參閱建立通知

需要解鎖裝置

使用者可能會在裝置的螢幕鎖定畫面上查看通知動作。如果通知動作讓應用程式啟動活動或傳送直接回覆,使用者必須先解鎖裝置,應用程式才能叫用該通知動作。

在 Android 12 (API 級別 31) 及以上版本中,您可以設定通知動作,使應用程式必須解鎖裝置才能叫用該動作,而不受動作啟動的工作流程影響。這個選項可為裝置在鎖定裝置上的通知增添一層安全防護。

如要規定裝置在叫用特定通知動作前必須先解鎖,請在建立通知動作時將 true 傳遞至 setAuthenticationRequired(),如以下程式碼片段所示:

Kotlin

val moreSecureNotification = Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

Java

Notification moreSecureNotification = new Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build();

可展開的通知

根據預設,通知的文字內容會遭到截斷,以便在單行顯示所有內容。如果想增加通知的長度,您可以套用額外的範本來啟用較大型的可展開文字區域,如圖 9 所示。

圖 9.能夠顯示大型文字的可展開通知。

您也可以建立含有圖片、採用收件匣樣式、包含即時通訊對話或設有媒體播放控制項的可展開通知。詳情請參閱「建立可展開的通知」。

通知更新和群組

為避免在有其他更新時向使用者發出數則或多餘的通知,請更新現有通知,而不要發出新通知,或使用收件匣樣式的通知以顯示對話更新資訊。

不過,如果您必須發出數則通知,不妨將不同的通知組合成一個群組 (適用於 Android 7.0 以上版本)。

通知群組能讓您將通知導覽匣中的數則通知收合成一則含有摘要的訊息。使用者可以逐步展開通知群組,以及群組中的每則通知來取得詳細資料,如圖 10 所示。

圖 10.已收合與展開的通知群組。

如要進一步瞭解如何將通知新增至群組中,請參閱「建立通知群組」。

通知管道

從 Android 8.0 (API 級別 26) 開始,所有通知都必須指派專屬管道,否則就不會顯示。如此一來,使用者就能針對您的應用程式停用特定通知管道,而不必停用「所有」通知。使用者可以透過 Android 系統設定控制每個管道的視覺和聽覺選項,如圖 11 所示。使用者也可以按住通知,來變更相關頻道的行為。

在搭載 Android 7.1 (API 級別 25) 以下版本的裝置上,使用者只能管理個別應用程式的通知。在 Android 7.1 以下版本中,每個應用程式只有一個管道。

圖 11.「時鐘」應用程式的通知設定,以及該應用程式的其中一個管道。

應用程式會針對應用程式發出的每種通知類型,提供不同的管道。應用程式也可以建立通知管道,以回應使用者所做的選擇。舉例來說,您可以為使用者在訊息應用程式中建立的每個對話群組,設定不同的通知管道。

在 Android 8.0 以上版本中,您也可以指定通知的重要性等級,因此張貼在相同通知管道中的所有通知都會有同樣的行為。這會在下一節中說明。

詳情請參閱「建立及管理通知管道」。

通知重要性

Android 會根據通知的「重要性」,判斷通知在視覺和聽覺對使用者的干擾程度。通知的重要性越大,通知的干擾程度就越高。

在 Android 7.1 (API 級別 25) 以下版本中,通知的重要性取決於通知的 priority

在 Android 8.0 (API 級別 26) 以上版本中,通知的重要性取決於通知張貼管道的 importance。使用者可以在系統設定中變更通知管道的重要性,如圖 12 所示。

圖 12. 在 Android 8.0 以上版本中,使用者可以變更每個管道的重要性。

可能的重要性等級和相關通知行為如下:

  • 緊急:發出音效,並顯示為抬頭通知。

  • 高:發出音效。

  • 中:不發出聲音。

  • 低:不會發出音效,也不會顯示在狀態列中。

無論重要性為何,所有通知都會顯示在不會造成乾擾的系統 UI 位置 (例如通知導覽匣),也會以標記形式顯示在啟動器圖示上。不過,您可以修改通知標記的外觀

詳情請參閱「如何設定重要性」。

零打擾模式

從 Android 5.0 (API 等級 21) 開始,使用者可以啟用「零打擾模式」,禁止所有通知讓音效或震動。通知仍會顯示在系統 UI 中,除非使用者指定其他設定。

零打擾模式有三個等級:

  • 完全靜音:封鎖所有音效和震動,包括來自鬧鐘、音樂、影片和遊戲的音效和震動要求。
  • 僅限鬧鐘:封鎖鬧鐘以外的所有音效和震動。
  • 僅限優先通知:使用者可以設定哪種系統通用類別能夠幹擾自己,例如僅限鬧鐘、提醒、活動、通話或訊息。針對訊息和通話,使用者可以根據寄件者或呼叫端進行篩選,如圖 13 所示。

圖 13. 使用者可以根據系統通用類別 (左側) 以及傳送者或來電者 (右側),允許通知。

在 Android 8.0 (API 級別 26) 以上版本中,使用者可以額外允許應用程式專用類別 (也稱為管道) 的通知,方法是分別覆寫各個管道的「零幹擾」設定。舉例來說,付款應用程式可能擁有與提款和存款相關的通知管道。使用者可以在優先模式中允許提款通知、存款通知,或是兩者皆可通知。

在搭載 Android 7.1 (API 等級 25) 及以下版本的裝置上,使用者可以設定是否要讓每個應用程式的通知幹擾,而不是設定每個管道的通知。

如要針對上述使用者設定調整您的通知,您必須設定系統通用的類別

前景服務的通知

當您的應用程式執行前景服務時,您就需要使用通知;前景服務是指在背景長時間執行且對使用者明顯可見的 Service。使用者無法以一般的通知關閉方式來關閉這項通知。如要移除通知,必須停止服務或從前景狀態中移除服務。

詳情請參閱「前景服務」。如果您要建構媒體播放器,請同時參閱「在背景播放媒體」。

貼文限制

從 Android 8.1 (API 級別 27) 開始,應用程式每秒只能發出通知音效一次。如果您的應用程式會在一秒鐘內發布數則通知,相關通知會如預期般地顯示在螢幕上,但只有第一則通知可發出音效 (每秒一次)。

不過,Android 還限制了更新通知的頻率。如果您過於頻繁地發布單一通知的更新 (例如在不到一秒內發布更新),系統可能會捨棄更新。

通知相容性

Android 通知系統 UI 和通知相關的 API 會不斷演進。如要在支援舊版裝置的情況下使用最新的通知 API 功能,請使用支援資料庫通知 API、NotificationCompat 及其子類別,以及 NotificationManagerCompat。這樣一來,您就不必編寫條件式程式碼來檢查 API 級別,因為這些 API 都會處理。

NotificationCompat 會隨著平台的演進更新,納入最新的方法。不過,即使可以在 NotificationCompat 中使用某個方法,也無法保證能在舊型裝置上提供相應功能。在某些情況下,在舊版裝置上呼叫新推出的 API 會導致免人工管理。

以下摘要說明 Android 通知在各 API 級別間最顯著的行為變更。

Android 5.0 (API 等級 21)

  • 介紹螢幕鎖定和抬頭通知。

  • 讓使用者將手機設為「零打擾」模式,並設定在裝置處於「僅限優先通知」模式時,有哪些通知可以乾擾使用者。

  • 新增方法來設定是否要讓通知顯示在螢幕鎖定畫面上 (例如 setVisibility()),以及指定通知文字的「公開」版本。

  • 新增 setPriority() 方法,讓系統瞭解通知的干擾程度。舉例來說,將優先順序設定為高,就會讓通知顯示為抬頭通知。

  • 為 Android Wear (現在稱為 Wear OS) 裝置新增通知堆疊支援。使用 setGroup() 將通知放入堆疊。在 Android 7.0 (API 級別 24) 之前,平板電腦或手機不支援通知堆疊 (稍後稱為群組或組合)。

Android 7.0 (API 等級 24)

  • 重新設定通知範本的樣式,以強調主頁橫幅和顯示圖片。

  • 新增三個通知範本:一個用於簡訊應用程式,另外兩個則是用來搭配可展開的預設用途和其他系統裝飾項目來裝飾自訂內容檢視區塊。

  • 新增手持裝置 (例如手機和平板電腦) 對通知群組的支援。使用的 API 與 Android 5.0 (API 級別 21) 中引入的 Android Wear (現在稱為 Wear OS) 通知堆疊相同。

  • 讓使用者在通知中利用內嵌回覆進行回覆。使用者可以輸入文字,然後將其轉送至通知的父項應用程式。

Android 8.0 (API 等級 26)

  • 將個別通知放入特定管道

  • 可讓使用者根據管道關閉通知,不必關閉應用程式的所有通知。

  • 讓已發出通知的應用程式在主畫面或啟動器畫面中的應用程式圖示上方顯示通知標記。

  • 讓使用者能夠延後導覽匣中的通知。您可以為通知設定自動逾時。

  • 可讓您設定通知的背景顏色。

  • 將部分與通知行為相關的 API 從 Notification 移至 NotificationChannel。舉例來說,Android 8.0 及以上版本請使用 NotificationChannel.setImportance(),而非 NotificationCompat.Builder.setPriority()

Android 13.0 (API 級別 33)

Android 14.0 (API 級別 34)

  • 將全螢幕意圖通知限制在提供呼叫和鬧鐘的應用程式。使用 NotificationManager.canUseFullScreenIntent API 檢查應用程式是否具備權限。如果沒有,應用程式可以使用 ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT 啟動設定頁面,以供使用者授予權限。

  • 即使已設定 Notification.FLAG_ONGOING_EVENT 標記,使用者仍能關閉通知動作,藉此變更使用者無法關閉通知的方式。這不適用於 CallStyle 通知,前提是 Notification.FLAG_ONGOING_EVENT 標記已設定或裝置政策控制器 (DPC) 和企業支援套件。這不適用於手機鎖定或使用者選取「全部清除」