1. 程式人生 > >Android 8.0 特性之 NotificationChannel

Android 8.0 特性之 NotificationChannel

在 Android 8.0 中,為 Notification 設定 led,震動,鈴聲時,若按照以前的方法,在發出通知的時候,會出現一行 Toast 資訊:

...Failed to post notification on channel "null"...

這是由於在 Android 8.0 上,增加了一個 NotificationChannel (通知渠道)的概念,用來允許您為要顯示的每種通知型別建立使用者可自定義的渠道。使用者介面將通知渠道稱之為通知類別。

以新增鈴聲為例,程式碼如下:

首先,建立一個 NotificationChannel:

NotificationManager mNotiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

Uri mUri = Settings.System.DEFAULT_NOTIFICATION_URI;

NotificationChannel mChannel = new NotificationChannel(String id, String name, NotificationManager.IMPORTANCE_LOW);

mChannel.setDescription(String description);

mChannel.setSound(mUri, Notification.AUDIO_ATTRIBUTES_DEFAULT);

mNotiManager.createNotificationChannel(mChannel);

然後,為你的 Notification 設定 Channel:

Notification notification = new Notification.Builder(MainActivity.this)
    .setContentTitle("New Message")
    .setContentText("You've received new messages.")
    .setSmallIcon(R.drawable.ic_notify_status)
    .setChannelId(String id) //同上 channel id
    .build();
Update:
若不想客製化自己的鈴聲,可以將優先順序設定為 IMPORTANCE_DEFAULT,NotificationManagerService 會自動為其新增預設鈴聲,詳見 NotificationManagerService.java 即:
NotificationChannel mChannel = new NotificationChannel(String id, String name, NotificationManager.IMPORTANCE_DEFAULT);
mNotiManager.createNotificationChannel(mChannel);
有關 led 屬性個震動,均可使用 NotificationChannel 設定。