8.1: Notifikasi
Materi:
- Pengantar
- Apa yang dimaksud dengan notifikasi?
- Membuat notifikasi
- Mengirim notifikasi
- Menggunakan kembali notifikasi
- Mengosongkan notifikasi
- Kompatibilitas notifikasi
- Panduan desain notifikasi
- Praktik terkait
- Ketahui selengkapnya
Dalam bab ini, Anda akan mempelajari cara membuat, mengirim, dan menggunakan kembali notifikasi, serta cara membuatnya kompatibel dengan versi Android yang berbeda.
Apa yang dimaksud dengan notifikasi?
Notifikasi adalah pesan yang ditampilkan aplikasi kepada pengguna di luar UI normal aplikasi. Bila Anda memberi tahu sistem untuk mengeluarkan notifikasi, notifikasi terlebih dahulu akan muncul kepada pengguna berupa ikon di area notifikasi, di sebelah kiri bilah status.
Untuk melihat detail notifikasi, pengguna membuka panel samping notifikasi, atau menampilkan notifikasi pada layar kunci jika perangkat terkunci. Area notifikasi, layar kunci, dan panel samping notifikasi merupakan area yang dikontrol sistem yang bisa ditampilkan pengguna kapan saja.
Tangkapan layar menampilkan panel samping notifikasi yang "terbuka". Bilah status tidak terlihat, karena panel samping notifikasi terbuka.
Proses ini dijelaskan di bawah ini.
Membuat notifikasi
Anda membuat notifikasi menggunakan kelas NotificationCompat.Builder
. (Gunakan NotificationCompat
untuk kompatibilitas mundur terbaik. Untuk informasi selengkapnya, lihat Kompatibilitas notifikasi.) Kelas pembangun menyederhanakan pembuatan objek yang kompleks.
Untuk membuat NotificationCompat.Builder
, teruskan konteks aplikasi ke konstruktor:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
Menyetel komponen notifikasi
Saat menggunakan NotificationCompat.Builder, Anda harus menetapkan ikon kecil, teks untuk judul, dan pesan notifikasi. Anda harus mempertahankan pesan notifikasi kurang dari 40 karakter dan tidak mengulangi apa yang ada di judul. Misalnya:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("Dinner is ready!")
.setContentText("Lentil soup, rice pilaf, and cake for dessert.");
Anda juga perlu menyetel Intent
yang menentukan apa yang terjadi bila pengguna mengeklik notifikasi. Biasanya Intent ini mengakibatkan aplikasi meluncurkan Aktivitas.
Untuk memastikan sistem mengirimkan Intent
bahkan bila aplikasi sedang tidak dijalankan bila pengguna mengeklik notifikasi, bungkus Intent
dalam objek PendingIntent
, yang memungkinkan sistem mengirimkan Intent
apa pun keadaan aplikasi.
Untuk membuat instance PendingIntent
, gunakan salah satu metode berikut, bergantung pada bagaimana Anda ingin Intent
yang dimuat akan dikirim:
- Untuk meluncurkan Aktivitas bila pengguna mengeklik notifikasi, gunakan
PendingIntent.getActivity()
, dengan meneruskanIntent
eksplisit untuk Aktivitas yang ingin diluncurkan. MetodegetActivity()
sesuai denganIntent
yang dikirim menggunakanstartActivity()
. - Untuk
Intent
yang diteruskan ke dalamstartService()
(misalnya layanan untuk mengunduh file), gunakanPendingIntent.getService()
. - Untuk
Intent
siaran yang dikirim bersamasendBroadcast()
, gunakanPendingIntent.getBroadcast()
.
Setiap metode PendingIntent
ini menggunakan argumen berikut:
- Konteks aplikasi.
- Kode permintaan, yang merupakan ID integer konstanta untuk
PendingIntent
. - Objek
Intent
yang akan dikirim. - Flag
PendingIntent
yang menentukan cara sistem menangani beberapa objekPendingIntent
dari aplikasi yang sama.
Misalnya:
Intent contentIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingContentIntent = PendingIntent.getActivity(this, 0,
contentIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pendingContentIntent);
Untuk mengetahui selengkapnya tentang PendingIntent
, lihat PendingIntent documentation
.
Komponen opsional
Anda bisa menggunakan beragam opsi bersama notifikasi, termasuk:
- Tindakan notifikasi
- Prioritas
- Layout yang diluaskan
- Notifikasi yang berlangsung
Untuk opsi lainnya yang bisa Anda gunakan bersama notifikasi, lihat referensi NotificationCompat.Builder
.
Tindakan notifikasi
Aksi notifikasi adalah aksi yang bisa diambil pengguna pada notifikasi. Aksi tersedia melalui tombol aksi di notifikasi. Seperti Intent
yang menentukan apa yang terjadi bila pengguna mengeklik notifikasi, aksi notifikasi menggunakan PendingIntent
untuk melakukan aksi. Sistem Android biasanya menampilkan aksi notifikasi berupa tombol yang berdekatan dengan isi notifikasi. Mulai dengan Android 4.1 (API level 16), notifikasi mendukung ikon yang disematkan di bawah teks isi, seperti yang ditampilkan dalam tangkapan layar di bawah ini.
- Notifikasi ini memiliki dua tindakan yang bisa diambil pengguna, "Reply" atau "Archive". Masing-masing memiliki ikon.
Untuk menambahkan aksi notifikasi, gunakan metode addAction()
bersama objek NotificationCompat.Builder.
Teruskan di ikon, string judul dan PendingIntent
untuk dipicu bila pengguna mengetuk aksi. Misalnya:
mBuilder.addAction(R.drawable.car, "Get Directions", mapPendingIntent);
Untuk memastikan fungsionalitas tombol aksi selalu tersedia, ikuti petunjuk di bagian Kompatibilitas notifikasi, di bawah ini.
Prioritas notifikasi
Android memungkinkan Anda menetapkan level prioritas ke setiap notifikasi untuk memengaruhi cara sistem Android akan mengirimkannya. Notifikasi memiliki prioritas antara MIN
(-2
) dan MAX
(2
) yang sesuai dengan kepentingannya. Tabel berikut menampilkan konstanta prioritas yang tersedia yang didefinisikan di kelas Notification
.
Konstanta Prioritas |
Penggunaan |
PRIORITY_MAX |
Untuk notifikasi mendesak dan urgen yang memperingatkan pengguna terhadap kondisi yang didesak-waktu atau perlu diatasi sebelum bisa melanjutkan dengan tugas yang didesak-waktu. |
PRIORITY_HIGH |
Terutama untuk komunikasi penting, seperti pesan atau chat. |
PRIORITY_DEFAULT |
Untuk semua notifikasi yang tidak termasuk dalam salah satu prioritas lain yang dijelaskan di sini. |
PRIORITY_LOW |
Untuk informasi dan kejadian yang berharga atau relevan secara kontekstual, namun tidak urgen atau didesak-waktu. |
PRIORITY_MIN |
Untuk informasi latar belakang yang perlu diketahui. Misalnya, cuaca atau tempat menarik terdekat. |
Untuk mengubah prioritas notifikasi, gunakan metode setPriority()
pada objek NotificationCompat.Builder
, dengan meneruskan di salah satu konstanta di atas.
mBuilder.setPriority(Notification.PRIORITY_HIGH);
Notifikasi bisa jadi mengganggu. Menggunakan prioritas notifikasi dengan benar adalah langkah pertama untuk memastikan pengguna tidak mencopot pemasangan aplikasi Anda karena terlalu mengganggu.
Mengintip
Notifikasi dengan prioritas HIGH
atau MAX
bisa mengintip, yang artinya bergeser sedikit ke dalam tampilan di layar pengguna saat ini, aplikasi apa pun yang digunakan pengguna. Perhatikan, di perangkat yang menjalankan Android 6.0 dan yang lebih tinggi, pengguna bisa memblokir pengintipan dengan mengubah setelan "App notification" perangkat. Artinya Anda tidak bisa mengandalkan pengintipan notifikasi, sekalipun Anda telah mempersiapkannya sedemikian rupa.
Untuk membuat notifikasi yang bisa mengintip:
- Setel prioritas ke
HIGH
atauMAX
. Setel suara atau pola lampu menggunakan metode
setDefaults()
pada pembangun, yang meneruskan konstantaDEFAULTS_ALL
. Tindakan ini akan memberikan suara, pola lampu, dan getaran default pada notifikasi.NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(PRIORITY_HIGH) .setDefaults(DEFAULTS_ALL);
Layout tampilan yang diluaskan
Notifikasi di panel samping notifikasi muncul dalam dua layout utama, tampilan normal (yang merupakan default) dan tampilan yang diluaskan. Notifikasi tampilan yang diluaskan diperkenalkan dalam Android 4.1. Gunakan dengan hemat, karena tampilan tersebut menggunakan lebih banyak ruang dan perhatian daripada layout tampilan normal.
Untuk membuat notifikasi muncul di layout yang diluaskan, gunakan salah satu kelas helper ini:
- Penggunaan
NotificationCompat.BigTextStyle
untuk notifikasi berformat besar yang menyertakan banyak teks. - Penggunaan
NotificationCompat.InboxStyle
untuk notifikasi berformat besar yang menyertakan daftar berisi hingga lima string. - Penggunaan
Notification.MediaStyle
untuk notifikasi pemutaran media. Saat ini tidak ada versiNotificationCompat
untuk gaya ini, sehingga hanya bisa digunakan pada perangkat Android 4.1 atau di atasnya. Lihat bagian Kompatibilitas notifikasi untuk informasi selengkapnya. - Penggunaan
NotificationCompat.BigPictureStyle
, yang ditampilkan di tangkapan layar di bawah ini, untuk notifikasi berformat besar yang menyertakan lampiran gambar besar.
Misalnya, inilah cara menyetel BigPictureStyle
di notifikasi:
NotificationCompat notif = new NotificationCompat.Builder(mContext)
.setContentTitle("New photo from " + sender.toString())
.setContentText(subject)
.setSmallIcon(R.drawable.new_post)
.setLargeIcon(aBitmap)
.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(aBigBitmap)
.setBigContentTitle("Large Notification Title"))
.build();
Untuk mengetahui selengkapnya tentang mengimplementasikan gaya yang diluaskan, lihat dokumentasi NotificationCompat.Style.
Notifikasi yang berlangsung
Notifikasi yang berlangsung adalah notifikasi yang tidak bisa ditutup oleh pengguna. Aplikasi harus membatalkan notifikasi tersebut secara eksplisit dengan memanggil cancel()
atau cancelAll()
. Membuat beberapa notifikasi yang berlangsung akan mengganggu pengguna karena mereka tidak bisa membatalkan notifikasi tersebut. Gunakan notifikasi yang berlangsung dengan hemat.
Untuk membuat notifikasi yang berlangsung, setel setOngoing()
ke true
. Gunakan notifikasi yang berlangsung untuk menunjukkan tugas latar belakang yang aktif berinteraksi dengan pengguna (seperti memainkan musik) atau tugas yang sedang berlangsung di perangkat (misalnya pengunduhan file, operasi sinkronisasi, dan koneksi jaringan aktif).
Mengirim notifikasi
Gunakan kelas NotificationManager
untuk mengirim notifikasi:
- Panggil
getSystemService()
, dengan meneruskan di konstantaNOTIFICATION_SERVICE
, untuk membuat instanceNotificationManager
. - Panggil
notify()
untuk mengirimkan notifikasi. Dalam metodenotify()
, teruskan kedua nilai ini:- ID notifikasi, yang digunakan untuk memperbarui atau membatalkan notifikasi.
- Objek
NotificationCompat
yang Anda buat menggunakan objekNotificationCompat.Builder
.
Contoh berikut membuat instance NotificationManager
, kemudian membangun dan mengirimkan notifikasi:
mNotifyManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
//Builds the notification with all the parameters
NotificationCompat.Builder notifyBuilder = new NotificationCompat.Builder(this)
.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_text))
.setSmallIcon(R.drawable.ic_android)
.setContentIntent(notificationPendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setDefaults(NotificationCompat.DEFAULT_ALL);
//Delivers the notification
mNotifyManager.notify(NOTIFICATION_ID, notifyBuilder.build());
Menggunakan kembali notifikasi
Bila Anda perlu mengeluarkan notifikasi beberapa kali untuk tipe kejadian yang sama, Anda bisa memperbarui notifikasi sebelumnya dengan mengubah beberapa nilainya, menambahkan ke notifikasi, atau keduanya.
Untuk menggunakan kembali notifikasi yang ada:
- Perbarui objek
NotificationCompat.Builder
dan bangun objekNotification
dari sana, seperti saat Anda pertama kali membuat dan membangun notifikasi. - Kirim notifikasi bersama ID yang sama dengan yang digunakan sebelumnya.Penting: Jika notifikasi sebelumnya masih terlihat, sistem akan memperbaruinya dari isi objek
Notification
. Jika notifikasi sebelumnya sudah ditutup, notifikasi baru akan dibuat.
Mengosongkan notifikasi
Notifikasi tetap terlihat hingga salah satu hal berikut terjadi:
- Jika bisa dikosongkan, notifikasi akan menghilang bila pengguna menutupnya atau dengan menggunakan "Clear All".
- Jika Anda memanggil
setAutoCancel()
saat membuat notifikasi, notifikasi akan menghilang bila pengguna mengekliknya. - Jika Anda memanggil
cancel()
untuk ID notifikasi tertentu, notifikasi akan menghilang. - Jika Anda memanggil
cancelAll()
, semua notifikasi yang telah dikeluarkan akan menghilang.
Karena notifikasi yang berlangsung tidak bisa ditutup oleh pengguna, aplikasi harus membatalkannya dengan memanggil cancel()
atau cancelAll()
.
Kompatibilitas notifikasi
Untuk memastikan kompatibilitas terbaik, buat notifikasi dengan NotificationCompat
dan subkelasnya, terutama NotificationCompat.Builder
.
Ingatlah bahwa tidak semua fitur notifikasi tersedia untuk setiap versi Android, meskipun metode untuk menyetelnya ada di kelas pustaka dukungan NotificationCompat.Builder
. Misalnya, layout tampilan yang diluaskan untuk notifikasi hanya tersedia di Android 4.1 dan yang lebih tinggi, namun tombol aksi bergantung pada layout tampilan yang diluaskan. Artinya jika Anda menggunakan tombol aksi notifikasi, tombol itu tidak akan ditampilkan di perangkat yang menjalankan apa saja sebelum Android 4.1.
Untuk mengatasinya:
Jangan mengandalkan tombol aksi notifikasi untuk melakukan aksi notifikasi; sebagai gantinya buatlah aksi yang tersedia di Aktivitas. Anda mungin perlu menambahkan Aktivitas baru untuk melakukannya.
Misalnya, jika Anda menyetel aksi notifikasi yang menyediakan kontrol untuk menghentikan dan memulai pemutaran media, pertama-tama implementasikan kontrol ini dalam Aktivitas di aplikasi Anda.
Mulailah Aktivitas bila pengguna mengeklik notifikasi. Caranya:
Buat
PendingIntent
untuk Aktivitas.Panggil
setContentIntent()
untuk menambahkanPendingIntent
ke notifikasi.
- Penggunaan
addAction()
untuk menambahkan fitur ke notifikasi jika perlu. Ingatlah bahwa fungsionalitas apa pun yang ditambahkan juga harus tersedia di Aktivitas yang dimulai bila pengguna mengeklik notifikasi.
Panduan desain notifikasi
Notifikasi selalu mengganggu pengguna. Karena itu, notifikasi harus singkat, tepat waktu, dan yang terpenting, relevan.
- Relevan: Tanyakan pada diri sendiri apakah informasi ini sangat penting untuk pengguna. Apa yang terjadi jika mereka tidak mendapatkan notifikasi? Misalnya, acara kalender yang dijadwalkan kemungkinan adalah relevan.
- Tepat Waktu: Notifikasi perlu muncul ketika berguna. Misalnya, memberi tahu pengguna bila tiba waktu untuk berangkat ke janji temu adalah hal yang berguna.
- Singkat: Gunakan kata sesedikit mungkin. Sekarang, tantanglah diri sendiri untuk mengatakannya dengan lebih sedikit.
Berikan kemampuan untuk memilih kepada pengguna:
- Sediakan setelan di aplikasi Anda yang memungkinkan pengguna memilih jenis notifikasi yang ingin diterima dan cara menerimanya.
Selain prinsip dasar ini, notifikasi memiliki panduan desain sendiri:
- Untuk mengetahui cara mendesain notifikasi dan interaksinya, lihat dokumentasi pola notifikasi Desain Material.
- Untuk mempelajari cara mendesain notifikasi dan interaksinya bagi versi Android yang lebih lama, lihat Notifikasi, Android 4.4 dan yang lebih rendah.
- Untuk detail penting tentang perubahan Desain Material yang diperkenalkan di Android 5.0 API (level 21), lihat pelatihan Desain Material.
Praktik terkait
Latihan terkait dan dokumentasi praktik ada di Dasar-Dasar Developer Android: Praktik.
Ketahui selengkapnya
Panduan
Referensi