新特性
在 Android 8.0 中,我們已重新設計通知,以便為管理通知行為和設定提供更輕鬆和更統一的方式。這些變更包括:
- 通知渠道:Android 8.0 引入了通知渠道,其允許您為要顯示的每種通知型別建立使用者可自定義的渠道。使用者介面將通知渠道稱之為通知類別。要了解如何實現通知渠道的資訊,請參閱通知渠道指南。
- 通知標誌:Android 8.0 引入了對在應用啟動器圖示上顯示通知標誌的支援。通知標誌可反映某個應用是否存在與其關聯、並且使用者尚未予以清除也未對其採取行動的通知。通知標誌也稱為通知點。要了解如何調整通知標誌,請參閱通知標誌指南。
- 休眠:使用者可以將通知置於休眠狀態,以便稍後重新顯示它。重新顯示時通知的重要程度與首次顯示時相同。應用可以移除或更新已休眠的通知,但更新休眠的通知並不會使其重新顯示。
- 通知超時:現在,使用
setTimeoutAfter()
建立通知時您可以設定超時。您可以使用此函式指定一個持續時間,超過該持續時間後,通知應取消。如果需要,您可以在指定的超時持續時間之前取消通知。 - 通知設定:當您使用
Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
Intent 從通知建立指向應用通知設定的連結時,您可以呼叫setSettingsText()
來設定要顯示的文字。此係統可以提供以下 Extra 資料和 Intent,用於過濾應用必須向使用者顯示的設定:EXTRA_CHANNEL_ID
、NOTIFICATION_TAG
和NOTIFICATION_ID
。 - 通知清除:系統現在可區分通知是由使用者清除,還是由應用移除。要檢視清除通知的方式,您應實現
NotificationListenerService
類的新onNotificationRemoved()
函式。 - 背景顏色:您現在可以設定和啟用通知的背景顏色。只能在使用者必須一眼就能看到的持續任務的通知中使用此功能。例如,您可以為與駕車路線或正在進行的通話有關的通知設定背景顏色。您還可以使用
Notification.Builder.setColor()
設定所需的背景顏色。這樣做將允許您使用Notification.Builder.setColorized()
啟用通知的背景顏色設定。 - 訊息樣式:現在,使用
MessagingStyle
類的通知可在其摺疊形式中顯示更多內容。對於與訊息有關的通知,您應使用MessagingStyle
類。您還可以使用新的addHistoricMessage()
函式,通過向與訊息相關的通知新增歷史訊息為會話提供上下文。
建立通知
您可以在 NotificationCompat.Builder
物件中為通知指定 UI 資訊和操作。要建立通知,請呼叫 NotificationCompat.Builder.build()
,它將返回包含您的具體規範的 Notification
物件。要發出通知,請通過呼叫 NotificationManager.notify()
將 Notification
物件傳遞給系統。
必需的通知內容
Notification
物件必須包含以下內容:
- 小圖示,由
setSmallIcon()
設定 - 標題,由
setContentTitle()
設定 - 詳細文字,由
setContentText()
設定
建立通知/自定義通知渠道
(1)NotificationManager獲取
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);複製程式碼
(2)通知渠道的建立
// Creates an explicit intent for an Activity in your app
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(MainActivity.this);
taskStackBuilder.addParentStack(Main2Activity.class);
taskStackBuilder.addNextIntent(intent);
// 通過taskStackBuilder物件獲取PendingIntent
PendingIntent pi = taskStackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
String custom_id = "marco_notification"; // 自定義通知渠道
idCharSequence name = getString(R.string.channel_name); // 自定義通知渠道
nameString description = getString(R.string.channel_description); // 自定義通知渠道描述
int importance = NotificationManager.IMPORTANCE_HIGH; // 自定義通知渠道級別
//建立自定義渠道
NotificationChannel marco_channel = new NotificationChannel(custom_id, name, importance);
// 新增一系列特性
marco_channel.setDescription(description);
marco_channel.enableLights(true);
marco_channel.setLightColor(Color.RED);
notificationManager.createNotificationChannel(marco_channel);複製程式碼
(3)通知的建立、顯示
NotificationCompat.Builder notification = new NotificationCompat.Builder(MainActivity.this, custom_id)
.setContentTitle("This is a Notification")
.setContentText("Notification contentText")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentIntent(pi);
notificationManager.notify(1,notification.build());複製程式碼
以下為程式碼截圖和通知顯示效果:
圖1. 建立自定義渠道的Notification程式碼邏輯
圖2. Notification顯示截圖
通知超時
NotificationCompat.Builder notification = new NotificationCompat.Builder(MainActivity.this, custom_id)
.setContentTitle("This is a Notification")
.setContentText("Notification contentText")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentIntent(pi)
// 設定超時時間,5000 = 5秒,Notification將會消失
.setTimeoutAfter(5000);複製程式碼