Android 8.0 Oreo 一定得實作的通知頻道Notification channels

Android 8.0 Oreo 一定得實作的通知頻道Notification channels

從 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,這下有點抖了。

多了一道讓使用者決定與分類,很貼心的設計,但可稍苦了開發人員了,但寫程式不就是一直寫就是了嗎~,小事一椿,懂了,就沒什麼大問題了。

發佈留言