通知泛指 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 標示出最常見的通知部分,詳細說明如下:
- 小型圖示:必要元素,請使用
setSmallIcon()
進行設定。 - 應用程式名稱:由系統提供。
- 時間戳記:由系統提供,但您可以使用
setWhen()
覆寫,或使用setShowWhen(false)
隱藏。 - 大型圖示:選用,通常只會用來顯示聯絡人的相片。請勿將其用於應用程式圖示。使用
setLargeIcon()
設定。 - 標題:選用;使用
setContentTitle()
設定。 - 文字:選用;使用
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 16.0 (API 級別 36)
現在,系統會代表應用程式自動將通知分組。
系統會自動將下列通知分組:
- 不含摘要的通知
- 不含孩子通知的通知
- 單一或少量兒童通知
Android 15.0 (API 級別 35)
Android 15 推出通知冷卻功能,可改善連續收到通知時的體驗。這項功能最多可減少重複通知的顯示次數、音量和震動強度達兩分鐘。
需要音效和觸覺回饋才能引起注意的重大通知,不受冷卻時間限制。使用者可以在「設定」中關閉通知冷卻功能。
圖 9.通知冷卻設定。
以下範例說明如何找到通知冷卻設定:
Kotlin
val intent = Intent(Settings.ACTION_MANAGE_ADAPTIVE_NOTIFICATIONS) val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
Java
Intent intent = new Intent(Settings.ACTION_MANAGE_ADAPTIVE_NOTIFICATIONS) PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)