Membuat dan mengelola saluran notifikasi

Mulai Android 8.0 (API level 26), semua notifikasi harus ditetapkan ke saluran TV Anda. Untuk setiap saluran, Anda dapat mengatur perilaku visual dan auditori yang diterapkan ke semua notifikasi di saluran tersebut. Pengguna dapat mengubah setelan ini dan memutuskan saluran notifikasi mana dari aplikasi yang bisa mengganggu atau terlihat.

Tonton video berikut untuk ringkasan channel dan notifikasi lainnya di Android 8.0.

Pengaturan pengguna untuk saluran notifikasi tersedia untuk setiap aplikasi di pengaturan sistem, seperti yang ditunjukkan pada gambar 1.

Gambar 1. Setelan notifikasi untuk aplikasi Jam dan salah satu salurannya.

Setelah membuat saluran notifikasi, Anda tidak dapat mengubah notifikasi perilaku model. Pengguna memiliki kendali penuh pada saat itu. Namun, Anda masih dapat mengubah nama dan deskripsi channel.

Buat saluran untuk setiap jenis notifikasi yang perlu Anda kirim. Anda juga dapat membuat saluran notifikasi untuk mencerminkan pilihan yang dibuat oleh pengguna. Sebagai contoh, Anda dapat menyiapkan saluran notifikasi terpisah untuk setiap grup percakapan yang dibuat oleh pengguna di aplikasi pesan.

Bila menargetkan Android 8.0 (API level 26) atau yang lebih tinggi, Anda harus mengimplementasikan satu atau saluran notifikasi lainnya. Jika targetSdkVersion ditetapkan ke 25 atau lebih rendah, saat aplikasi Anda berjalan di Android 8.0 (API level 26) atau yang lebih tinggi, aplikasi berperilaku 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:

  1. Buat Objek NotificationChannel dengan ID saluran unik, nama yang terlihat oleh pengguna, dan tingkat kepentingan.

  2. (Opsional) Tentukan deskripsi yang akan dilihat pengguna di setelan sistem dengan setDescription()

  3. 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 sehingga aman untuk memanggil kode ini saat memulai aplikasi.

Secara default, semua notifikasi yang diposting ke channel tertentu menggunakan elemen visual dan perilaku pendengaran yang ditentukan oleh tingkat kepentingan dari NotificationManagerCompat , seperti IMPORTANCE_DEFAULT atau IMPORTANCE_HIGH. Lihat bagian berikutnya untuk informasi selengkapnya tentang tingkat kepentingan.

Jika ingin menyesuaikan lebih lanjut perilaku notifikasi default channel Anda, Anda dapat memanggil metode seperti enableLights(), setLightColor(), dan setVibrationPattern() pada NotificationChannel. Ingat bahwa setelah membuat channel, Anda tidak dapat mengubah setelan ini, dan pengguna memiliki kendali akhir atas apakah ini perilaku model.

Anda juga bisa membuat beberapa saluran notifikasi dalam satu operasi dengan menelepon createNotificationChannels()

Menetapkan tingkat kepentingan

Nilai penting channel memengaruhi tingkat gangguan untuk semua notifikasi yang diposting di saluran tersebut. Tentukan dalam konstruktor NotificationChannel, menggunakan salah satu lima tingkat kepentingan, mulai dari IMPORTANCE_NONE(0) dapat IMPORTANCE_HIGH(4).

Untuk mendukung perangkat yang menjalankan Android 7.1 (API level 25) atau yang lebih rendah, Anda juga harus panggilan telepon setPriority() untuk setiap notifikasi, menggunakan konstanta prioritas dari NotificationCompat .

Tingkat kepentingan (NotificationManager.IMPORTANCE_*) dan prioritas Konstanta (NotificationCompat.PRIORITY_*) dipetakan ke 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
Medium
Tidak bersuara.
IMPORTANCE_LOW PRIORITY_LOW
Rendah
Tidak bersuara dan tidak muncul di status bar.
IMPORTANCE_MIN PRIORITY_MIN
Tidak ada
Tidak bersuara dan tidak muncul di status bar atau shade.
IMPORTANCE_NONE N/A

Semua notifikasi, terlepas dari tingkat kepentingannya, muncul di sistem yang tidak mengganggu Lokasi UI, seperti di panel samping notifikasi dan badge pada ikon peluncur, meskipun Anda bisa mengubah tampilan badge notifikasi.

Setelah Anda mengirimkan channel ke NotificationManager, Anda tidak dapat mengubah tingkat kepentingan. Namun, pengguna dapat mengubah untuk saluran aplikasi Anda kapan saja.

Untuk mengetahui informasi tentang pemilihan tingkat prioritas yang sesuai, lihat "Prioritas level" di Panduan desain notifikasi.

Membaca setelan saluran notifikasi

Pengguna dapat mengubah pengaturan untuk saluran notifikasi, termasuk perilaku seperti getaran dan suara notifikasi. Jika Anda ingin mengetahui pengaturan pengguna berlaku untuk saluran notifikasi Anda, ikuti langkah-langkah berikut:

  1. Mendapatkan objek NotificationChannel dengan memanggil getNotificationChannel() atau getNotificationChannels().

  2. Buat kueri setelan saluran tertentu seperti getVibrationPattern(), getSound(), dan getImportance().

Jika Anda mendeteksi setelan channel yang Anda yakini menghambat perilaku yang diinginkan untuk aplikasi Anda, Anda bisa menyarankan agar pengguna mengubahnya dan memberikan tindakan untuk buka setelan channel, seperti yang ditunjukkan di bagian berikutnya.

Membuka setelan saluran notifikasi

Setelah membuat saluran notifikasi, Anda tidak dapat mengubah notifikasi perilaku visual dan pendengaran secara terprogram. Hanya pengguna yang dapat mengubah perilaku saluran dari pengaturan sistem. Untuk memberi pengguna akses mudah ke pengaturan notifikasi ini, tambahkan item di UI setelan yang membuka setelan sistem ini.

Anda dapat membuka pengaturan sistem untuk saluran notifikasi dengan Intent yang menggunakan ACTION_CHANNEL_NOTIFICATION_SETTINGS tindakan.

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 menetapkan 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 Anda ingin mengatur tampilan saluran lebih lanjut di UI pengaturan, Anda dapat membuat grup saluran. Suatu ide bagus 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 dapat dengan mudah mengidentifikasi dan mengontrol beberapa saluran notifikasi yang memiliki nama identik.

Gambar 2. Setelan saluran notifikasi dengan grup untuk akun pribadi dan kerja.

Misalnya, aplikasi jejaring sosial dapat menyertakan dukungan untuk aplikasi pribadi dan pekerjaan menggunakan akun layanan. Dalam skenario ini, setiap akun mungkin memerlukan beberapa notifikasi saluran 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 akan memungkinkan pengguna membedakannya.

Setiap grup saluran notifikasi memerlukan ID, yang harus unik dalam paket, serta nama yang terlihat oleh pengguna. Cuplikan berikut menunjukkan cara untuk 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.

Setelah mengirimkan saluran ke pengelola notifikasi, Anda tidak dapat mengubah asosiasi antara saluran notifikasi dan grup.