Android O 新特性 — Notification

Deepcoder_Marco發表於2019-02-28

新特性

Android 8.0 中,我們已重新設計通知,以便為管理通知行為和設定提供更輕鬆和更統一的方式。這些變更包括:

  • 通知渠道:Android 8.0 引入了通知渠道,其允許您為要顯示的每種通知型別建立使用者可自定義的渠道。使用者介面將通知渠道稱之為通知類別。要了解如何實現通知渠道的資訊,請參閱通知渠道指南。
  • 通知標誌:Android 8.0 引入了對在應用啟動器圖示上顯示通知標誌的支援。通知標誌可反映某個應用是否存在與其關聯、並且使用者尚未予以清除也未對其採取行動的通知。通知標誌也稱為通知點。要了解如何調整通知標誌,請參閱通知標誌指南。
  • 休眠:使用者可以將通知置於休眠狀態,以便稍後重新顯示它。重新顯示時通知的重要程度與首次顯示時相同。應用可以移除或更新已休眠的通知,但更新休眠的通知並不會使其重新顯示。
  • 通知超時:現在,使用 setTimeoutAfter() 建立通知時您可以設定超時。您可以使用此函式指定一個持續時間,超過該持續時間後,通知應取消。如果需要,您可以在指定的超時持續時間之前取消通知。
  • 通知設定:當您使用 Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCESIntent 從通知建立指向應用通知設定的連結時,您可以呼叫 setSettingsText() 來設定要顯示的文字。此係統可以提供以下 Extra 資料和 Intent,用於過濾應用必須向使用者顯示的設定:EXTRA_CHANNEL_IDNOTIFICATION_TAGNOTIFICATION_ID
  • 通知清除:系統現在可區分通知是由使用者清除,還是由應用移除。要檢視清除通知的方式,您應實現 NotificationListenerService 類的新 onNotificationRemoved() 函式。
  • 背景顏色:您現在可以設定和啟用通知的背景顏色。只能在使用者必須一眼就能看到的持續任務的通知中使用此功能。例如,您可以為與駕車路線或正在進行的通話有關的通知設定背景顏色。您還可以使用 Notification.Builder.setColor() 設定所需的背景顏色。這樣做將允許您使用 Notification.Builder.setColorized() 啟用通知的背景顏色設定。
  • 訊息樣式:現在,使用 MessagingStyle 類的通知可在其摺疊形式中顯示更多內容。對於與訊息有關的通知,您應使用 MessagingStyle 類。您還可以使用新的 addHistoricMessage() 函式,通過向與訊息相關的通知新增歷史訊息為會話提供上下文。

                                  Android O 新特性 — Notification

建立通知

您可以在 NotificationCompat.Builder 物件中為通知指定 UI 資訊和操作。要建立通知,請呼叫 NotificationCompat.Builder.build(),它將返回包含您的具體規範的 Notification 物件。要發出通知,請通過呼叫 NotificationManager.notify()Notification 物件傳遞給系統。

必需的通知內容

Notification 物件必須包含以下內容:

建立通知/自定義通知渠道

(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());複製程式碼

以下為程式碼截圖和通知顯示效果:

Android O 新特性 — Notification

                                              圖1. 建立自定義渠道的Notification程式碼邏輯

Android O 新特性 — 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);複製程式碼

相關文章