通知總覽

通知是指 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)

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

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

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

  • 讓使用者在通知中使用內嵌回覆回覆。他們可以輸入文字,接著系統將其轉送到通知的主應用程式。

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 標記,允許使用者關閉通知動作,進而改變使用者的無法關閉通知方式。如果設定 Notification.FLAG_ONGOING_EVENT 標記或裝置政策控制器 (DPC) 以及企業的支援套件,這就不適用於 CallStyle 通知。如果手機處於鎖定狀態,或使用者選取「全部清除」,這也適用。