8.1: Notifikasi

Materi:

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. Area notifikasi berada 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. Panel samping notifikasi

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 meneruskan Intent eksplisit untuk Aktivitas yang ingin diluncurkan. Metode getActivity() sesuai dengan Intent yang dikirim menggunakan startActivity().
  • Untuk Intent yang diteruskan ke dalam startService() (misalnya layanan untuk mengunduh file), gunakan PendingIntent.getService().
  • Untuk Intent siaran yang dikirim bersama sendBroadcast(), gunakan PendingIntent.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 objek PendingIntent 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. Aksi Notifikasi

  1. 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:

  1. Setel prioritas ke HIGH atau MAX.
  2. Setel suara atau pola lampu menggunakan metode setDefaults() pada pembangun, yang meneruskan konstanta DEFAULTS_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:

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:

  1. Panggil getSystemService(), dengan meneruskan di konstanta NOTIFICATION_SERVICE , untuk membuat instance NotificationManager.
  2. Panggil notify() untuk mengirimkan notifikasi. Dalam metode notify(), teruskan kedua nilai ini:
    • ID notifikasi, yang digunakan untuk memperbarui atau membatalkan notifikasi.
    • Objek NotificationCompat yang Anda buat menggunakan objek NotificationCompat.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:

  1. Perbarui objek NotificationCompat.Builder dan bangun objek Notification dari sana, seperti saat Anda pertama kali membuat dan membangun notifikasi.
  2. 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:

    1. Buat PendingIntent untuk Aktivitas.

    2. Panggil setContentIntent() untuk menambahkan PendingIntent 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:

Praktik terkait

Latihan terkait dan dokumentasi praktik ada di Dasar-Dasar Developer Android: Praktik.

Ketahui selengkapnya

Panduan

Referensi

results matching ""

    No results matching ""