Mulai dari Android 8.0 (API level 26), semua notifikasi harus ditetapkan ke saluran. Untuk setiap saluran, Anda dapat menyetel perilaku visual dan auditori yang diterapkan ke semua notifikasi di saluran tersebut. Pengguna dapat mengubah setelan ini dan menentukan saluran notifikasi mana dari aplikasi Anda yang dapat mengganggu atau terlihat.
Tonton video berikut untuk ringkasan saluran dan fitur notifikasi lainnya di Android 8.0.
Setelan pengguna untuk saluran notifikasi tersedia untuk setiap aplikasi di setelan sistem, seperti yang ditunjukkan pada gambar 1.
Setelah membuat saluran notifikasi, Anda tidak dapat mengubah perilaku notifikasi. Pengguna memiliki kendali penuh pada saat itu. Namun, Anda tetap dapat mengubah nama dan deskripsi saluran.
Buat saluran untuk setiap jenis notifikasi yang perlu Anda kirim. Anda juga dapat membuat saluran notifikasi untuk mencerminkan pilihan yang dibuat oleh pengguna. Misalnya, Anda dapat menyiapkan saluran notifikasi yang terpisah untuk setiap grup percakapan yang dibuat oleh pengguna dalam aplikasi pesan.
Saat menargetkan Android 8.0 (API level 26) atau yang lebih baru, Anda harus mengimplementasikan satu atau
beberapa saluran notifikasi. Jika targetSdkVersion
Anda disetel ke 25 atau yang lebih rendah,
saat berjalan di Android 8.0 (API level 26) atau yang lebih tinggi, perilakunya akan sama
seperti pada perangkat yang menjalankan Android 7.1 (API level 25) atau yang lebih rendah.
Membuat saluran notifikasi
Untuk membuat saluran notifikasi, ikuti langkah-langkah berikut:
Buat objek
NotificationChannel
dengan ID saluran yang unik, nama yang terlihat oleh pengguna, dan tingkat kepentingan.Jika ingin, tentukan deskripsi yang akan dilihat pengguna dalam setelan sistem dengan
setDescription()
.Daftarkan saluran notifikasi dengan meneruskannya ke
createNotificationChannel()
.
Contoh berikut menunjukkan cara membuat dan mendaftarkan saluran notifikasi:
Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel) }
Java
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system. You can't change the importance // or other notification behaviors after this. NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
Membuat ulang saluran notifikasi yang ada dengan nilai aslinya tidak akan melakukan operasi apa pun, jadi aman untuk memanggil kode ini saat memulai aplikasi.
Secara default, semua notifikasi yang diposting ke saluran tertentu menggunakan perilaku visual dan
audit yang ditentukan oleh tingkat kepentingan dari class
NotificationManagerCompat
, seperti
IMPORTANCE_DEFAULT
atau
IMPORTANCE_HIGH
.
Lihat bagian berikutnya untuk informasi selengkapnya tentang
tingkat kepentingan.
Jika ingin lebih menyesuaikan perilaku notifikasi default channel,
Anda dapat memanggil metode seperti
enableLights()
,
setLightColor()
,
dan
setVibrationPattern()
di NotificationChannel
. Ingatlah bahwa setelah membuat saluran, Anda
tidak dapat mengubah setelan ini, dan pengguna memiliki kontrol akhir atas apakah
perilaku ini aktif atau tidak.
Anda juga dapat membuat beberapa saluran notifikasi dalam satu operasi dengan memanggil createNotificationChannels()
.
Menetapkan tingkat kepentingan
Tingkat kepentingan saluran memengaruhi tingkat gangguan semua notifikasi yang diposting di
saluran. Tentukan dalam konstruktor NotificationChannel
, menggunakan salah satu dari
lima tingkat kepentingan, mulai dari
IMPORTANCE_NONE(0)
hingga
IMPORTANCE_HIGH(4)
.
Untuk mendukung perangkat yang menjalankan Android 7.1 (API level 25) atau yang lebih rendah, Anda juga harus
memanggil
setPriority()
untuk setiap notifikasi, menggunakan konstanta prioritas dari
class
NotificationCompat
.
Konstanta tingkat kepentingan (NotificationManager.IMPORTANCE_*
) dan prioritas
(NotificationCompat.PRIORITY_*
) dipetakan ke opsi tingkat kepentingan yang terlihat oleh
pengguna, seperti yang ditunjukkan dalam tabel berikut.
Tingkat kepentingan yang terlihat oleh pengguna | Tingkat kepentingan (Android 8.0 dan versi lebih tinggi) | Prioritas (Android 7.1 dan yang lebih rendah) |
---|---|---|
Mendesak Berbunyi dan muncul sebagai notifikasi peringatan dini. |
IMPORTANCE_HIGH |
PRIORITY_HIGH atau PRIORITY_MAX |
Tinggi Berbunyi. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
Sedang Tidak berbunyi. |
IMPORTANCE_LOW |
PRIORITY_LOW |
Rendah Tidak berbunyi dan tidak muncul di status bar. |
IMPORTANCE_MIN |
PRIORITY_MIN |
Tidak ada Tidak ada suara dan tidak muncul di status bar atau menu. |
IMPORTANCE_NONE |
N/A |
Semua notifikasi, terlepas dari nilai pentingnya, muncul di lokasi UI sistem yang tidak mengganggu, seperti panel samping notifikasi dan sebagai badge pada ikon peluncur, meskipun Anda dapat mengubah tampilan badge notifikasi.
Setelah mengirimkan saluran ke
NotificationManager
, Anda
tidak dapat mengubah tingkat kepentingannya. Namun, pengguna dapat mengubah
preferensi mereka untuk saluran aplikasi Anda kapan saja.
Untuk mengetahui informasi tentang pemilihan tingkat prioritas yang sesuai, lihat "Tingkat prioritas" dalam Panduan desain notifikasi.
Membaca setelan saluran notifikasi
Pengguna dapat memodifikasi setelan saluran notifikasi, termasuk perilaku seperti getaran dan suara notifikasi. Jika ingin mengetahui setelan yang diterapkan pengguna ke saluran notifikasi Anda, ikuti langkah-langkah berikut:
Dapatkan objek
NotificationChannel
dengan memanggilgetNotificationChannel()
ataugetNotificationChannels()
.Buat kueri setelan saluran tertentu seperti
getVibrationPattern()
,getSound()
, dangetImportance()
.
Jika mendeteksi setelan saluran yang Anda yakini menghambat perilaku yang dimaksudkan untuk aplikasi Anda, Anda dapat menyarankan agar pengguna mengubahnya dan memberikan tindakan untuk membuka setelan saluran, seperti yang ditunjukkan di bagian berikutnya.
Membuka setelan saluran notifikasi
Setelah membuat saluran notifikasi, Anda tidak dapat mengubah perilaku visual dan auditori saluran notifikasi secara terprogram. Hanya pengguna yang dapat mengubah perilaku saluran dari setelan sistem. Untuk memberi pengguna akses yang mudah ke setelan notifikasi ini, tambahkan item di UI setelan aplikasi Anda yang akan membuka setelan sistem ini.
Anda dapat membuka setelan sistem untuk saluran notifikasi dengan Intent
yang menggunakan tindakan ACTION_CHANNEL_NOTIFICATION_SETTINGS
.
Misalnya, kode contoh berikut menunjukkan cara mengalihkan pengguna ke setelan untuk saluran notifikasi:
Kotlin
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
Java
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
Perhatikan bahwa intent memerlukan dua tambahan yang menentukan nama paket aplikasi Anda (juga dikenal sebagai ID aplikasi) dan saluran yang akan diedit.
Menghapus saluran notifikasi
Anda dapat menghapus saluran notifikasi dengan memanggil deleteNotificationChannel()
.
Kode contoh berikut menunjukkan cara menyelesaikan proses ini:
Kotlin
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
Java
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
Membuat grup saluran notifikasi
Jika ingin mengatur tampilan saluran lebih lanjut di UI setelan, Anda dapat membuat grup saluran. Ada baiknya jika aplikasi Anda mendukung beberapa akun pengguna, seperti untuk profil kerja, karena memungkinkan Anda membuat grup saluran notifikasi untuk setiap akun. Dengan cara ini, pengguna bisa dengan mudah mengidentifikasi dan mengontrol beberapa saluran notifikasi yang memiliki nama identik.
Misalnya, aplikasi jaringan sosial mungkin menyertakan dukungan untuk akun pribadi dan kerja. Dalam skenario ini, setiap akun mungkin memerlukan beberapa saluran notifikasi dengan fungsi dan nama yang identik, seperti berikut:
Akun pribadi dengan dua saluran:
Komentar baru
Rekomendasi postingan
Akun bisnis dengan dua saluran:
Komentar baru
Rekomendasi postingan
Mengatur saluran notifikasi ke dalam grup untuk setiap akun memungkinkan pengguna membedakan saluran notifikasi tersebut.
Setiap grup saluran notifikasi memerlukan ID yang harus bersifat unik dalam paket, serta nama yang terlihat oleh pengguna. Cuplikan berikut menunjukkan cara membuat grup saluran notifikasi.
Kotlin
// The id of the group. val groupId = "my_group_01" // The user-visible name of the group. val groupName = getString(R.string.group_name) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
Java
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
Setelah membuat grup baru, Anda dapat memanggil
setGroup()
untuk mengaitkan objek NotificationChannel
baru dengan grup tersebut.
Setelah mengirimkan saluran ke pengelola notifikasi, Anda tidak dapat mengubah pengaitan antara saluran notifikasi dan grup.