從 Android 8.0 Oreo 開始,Android 多了一個「通知頻道 (Notification channels)」功能,讓開發者設計出不同類型的通知。如果專案的目標平台是Android 8.0(API level 26) 時,開發者一定要實作通知頻道,若 APP 在 7.1 或之前的舊版本 Android 手機中執行,它會以舊的通知方式展示,也就是沒有通知頻道的效果。
通知頻道 (Notification channels)
通知小點 (Notification dot)
Android 8.0 開始,桌面上的圖示終於有類似 iOS 的圖示 Badge,可清楚的看到那個 APP 有通知了,如下圖箭頭所指處:
通知類別 (Notification categories)
當開發者在 APP 中設計通知頻道後,它在使用者的操作介面中稱為「通知類別 (Notification categories」,如下圖:
使用者可以自行決定那個類別要開啟或關閉它,如下圖:
專案目標平台
Android 專案的 targetSDKVersion 要設定為 26 (8.0 Oreo)才能夠使用 Notification channels,如下圖:
建立通知頻道
多了一個 android.app.NotificationChannel 類別,如果不想為你的 APP 設計分類功能,也得要在程式中產生一個 NotificationChannel,並指定它一些必要資料,如下片段:
NotificationChannel channelLove = new NotificationChannel( idLove, "Channel Love", NotificationManager.IMPORTANCE_HIGH); channelLove.setDescription("最重要的人"); channelLove.enableLights(true); channelLove.enableVibration(true);
idLove 是字串,用來分辨不同的通知頻道
之後再使用 NotificationManager 加入這個頻道:
notificationManager.createNotificationChannel(channelLove);
產生通知並發送
產生通知時,記得要呼叫 setChannelId 給它這個通知的所屬頻道 Id,如下:
Notification.Builder builder = new Notification.Builder(this) .setSmallIcon(R.drawable.love) .setContentTitle("My Love") .setContentText("Hi, my love!") .setChannelId(idLove); notificationManager.notify(1, builder.build());
開發時遇到比較麻煩反而是 package 的 import 問題,之前不少專案用到 NotificationCompat,這下有點抖了。
多了一道讓使用者決定與分類,很貼心的設計,但可稍苦了開發人員了,但寫程式不就是一直寫就是了嗎~,小事一椿,懂了,就沒什麼大問題了。