page.title=Pemberitahuan page.tags=pemberitahuan helpoutsWidget=true page.image=/preview/images/notifications-card.png trainingnavtop=true @jd:body <div id="qv-wrapper"> <div id="qv"> <!-- table of contents --> <h2>Dokumen ini berisi</h2> <ol> <li><a href="#direct">Balasan Langsung</a></li> <li><a href="#bundle">Bundel Pemberitahuan</a></li> <li><a href="#custom">Tampilan Khusus</a></li> <li><a href="#style">Gaya Pesan</a></li> </ol> </div> </div> <p>Android N memperkenalkan beberapa API baru yang memungkinkan aplikasi untuk mengeposkan pemberitahuan yang sangat mudah terlihat dan interaktif.</p> <p>Android N menambahkan API pemberitahuan{@link android.support.v4.app.RemoteInput} yang ada untuk mendukung balasan inline pada handset. Fitur ini memungkinkan pengguna merespons dengan cepat dari bayangan pemberitahuan tanpa mengunjungi aplikasi Anda.</p> <p> Android N juga memungkinkan Anda menggabungkan pemberitahuan yang serupa agar muncul sebagai satu pemberitahuan. Untuk memungkinkan hal ini, Android N menggunakan metode {@link android.support.v4.app.NotificationCompat.Builder#setGroup NotificationCompat.Builder.setGroup()} yang sudah ada. Pengguna bisa memperluas setiap pemberitahuan, dan melakukan tindakan seperti membalas dan menutup setiap pemberitahuan, satu per satu dari bayangan pemberitahuan. </p> <p>Terakhir, Android N juga menambahkan API baru yang memungkinkan Anda untuk memanfaatkan dekorasi sistem dalam tampilan pemberitahuan yang disesuaikan untuk aplikasi Anda. API ini membantu memastikan semua tampilan pemberitahuan sama-sama menggunakan penyajian yang konsisten dengan template standar.</p> <p>Dokumen ini menyoroti beberapa perubahan penting yang harus Anda perhitungkan saat menggunakan fitur pemberitahuan baru dalam aplikasi Anda.</p> <h2 id="direct">Balasan Langsung</h2> <p>Dengan fitur Balasan Langsung di Android N, pengguna bisa dengan cepat merespons pesan teks atau memperbarui daftar tugas secara langsung dalam antarmuka pemberitahuan. Pada perangkat genggam, tindakan balasan inline muncul sebagai tombol tambahan yang dilampirkan pada pemberitahuan. Bila pengguna membalas lewat keyboard, sistem akan melampirkan respons teks ke intent yang telah Anda tetapkan untuk tindakan pemberitahuan dan mengirimkan intent ke aplikasi perangkat genggam Anda. <img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x, {@docRoot}preview/images/inline-reply_2x.png 2x" width="400"> <p class="img-caption"> <strong>Gambar 1.</strong> Android N menambahkan tombol tindakan <strong>Reply</strong>. </p> <h3>Menambahkan tindakan balasan inline</h3> <p>Untuk membuat tindakan pemberitahuan yang mendukung balasan langsung: </p> <ol> <li>Buat instance {@link android.support.v4.app.RemoteInput.Builder} yang bisa Anda tambahkan ke tindakan pemberitahuan. Konstruktor kelas ini akan menerima string bahwa sistem menggunakannya sebagai kunci untuk masukan teks. Kemudian, aplikasi perangkat genggam Anda akan menggunakan kunci itu untuk mengambil teks masukan tersebut. <pre> // Key for the string that's delivered in the action's intent. private static final String KEY_TEXT_REPLY = "key_text_reply"; String replyLabel = getResources().getString(R.string.reply_label); RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) .setLabel(replyLabel) .build(); </pre> </li> <li>Lampirkan objek {@link android.support.v4.app.RemoteInput} pada tindakan dengan menggunakan <code>addRemoteInput()</code>. <pre> // Create the reply action and add the remote input. Notification.Action action = new Notification.Action.Builder(R.drawable.ic_reply_icon, getString(R.string.label), replyPendingIntent) .addRemoteInput(remoteInput) .build(); </pre> </li> <li>Terapkan tindakan pada pemberitahuan dan keluarkan pemberitahuan. <pre> // Build the notification and add the action. Notification newMessageNotification = new Notification.Builder(mContext) .setSmallIcon(R.drawable.ic_message) .setContentTitle(getString(R.string.title)) .setContentText(getString(R.string.content)) .addAction(action)) .build(); // Issue the notification. NotificationManager notificationManager = NotificationManager.from(mContext); notificationManager.notify(notificationId, newMessageNotification); </pre> </li> </ol> <p> Sistem akan meminta pengguna memasukkan respons bila mereka memicu tindakan pemberitahuan. </p> <img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x, {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300"> <p class="img-caption"> <strong>Gambar 2.</strong> Pengguna memasukkan teks dari bayangan pemberitahuan. </p> <h3> Mengambil masukan pengguna dari balasan inline </h3> <p> Untuk menerima masukan pengguna dari antarmuka pemberitahuan ke aktivitas yang Anda deklarasikan dalam intent tindakan balasan: </p> <ol> <li>Panggil {@link android.support.v4.app.RemoteInput#getResultsFromIntent getResultsFromIntent()} dengan meneruskan intent tindakan pemberitahuan sebagai parameter masukan. Metode ini mengembalikan {@link android.os.Bundle} yang berisi respons teks. <pre> Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); </pre> </li> <li>Lakukan kueri pada bundel menggunakan kunci hasil (diberikan ke konstruktor {@link android.support.v4.app.RemoteInput.Builder}). Anda bisa menyelesaikan proses ini dan mengambil teks masukan dengan membuat sebuah metode, seperti dalam cuplikan kode berikut: <pre> // Obtain the intent that started this activity by calling // Activity.getIntent() and pass it into this method to // get the associated string. private CharSequence getMessageText(Intent intent) { Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); if (remoteInput != null) { return remoteInput.getCharSequence(KEY_TEXT_REPLY); } return null; } </pre> </li> <li>Kompilasilah dan keluarkan pemberitahuan lain, menggunakan ID pemberitahuan yang sama dengan yang Anda berikan untuk pemberitahuan sebelumnya. Indikator kemajuan menghilang dari antarmuka pemberitahuan untuk memberi tahu pengguna mengenai balasan yang berhasil. Saat menangani pemberitahuan baru ini, gunakan konteks yang diteruskan ke metode {@code onReceive()} penerima. <pre> // Build a new notification, which informs the user that the system // handled their interaction with the previous notification. Notification repliedNotification = new Notification.Builder(context) .setSmallIcon(R.drawable.ic_message) .setContentText(getString(R.string.replied)) .build(); // Issue the new notification. NotificationManager notificationManager = NotificationManager.from(context); notificationManager.notify(notificationId, repliedNotification); </pre> </li> </ol> <p> Untuk aplikasi interaktif, seperti chat, akan berguna bila menyertakan konteks tambahan saat menangani teks yang diambil. Misalnya, aplikasi ini bisa menampilkan beberapa baris riwayat chat sekaligus. Bila pengguna merespons melalui {@link android.support.v4.app.RemoteInput}, Anda bisa memperbarui riwayat balasan menggunakan metode {@code setRemoteInputHistory()}. </p> <p> Pemberitahuan harus diperbarui atau dibatalkan setelah aplikasi menerima masukan jarak jauh. Bila pengguna membalas ke pembaruan jarak jauh menggunakan Balasan Langsung, jangan batalkan pemberitahuan. Melainkan, perbarui pemberitahuan untuk menampilkan balasan pengguna. Untuk pemberitahuan yang menggunakan {@code MessagingStyle}, Anda harus menambahkan balasannya sebagai pesan terbaru. Saat menggunakan template lain, Anda bisa menambahkan balasan pengguna ke riwayat masukan jarak jauh. </p> <h2 id="bundle">Bundel Pemberitahuan</h2> <p>Android N membekali pengembang dengan sebuah cara baru untuk menyatakan antrean pemberitahuan: <i>bundel pemberitahuan</i>. Ini mirip dengan fitur <a href="{@docRoot}training/wearables/notifications/stacks.html">Tumpukan Pemberitahuan</a> dalam Android Wear. Misalnya, jika aplikasi Anda membuat pemberitahuan untuk pesan yang diterima, bila lebih dari satu pesan diterima, pemberitahuan tersebut akan dibundel sebagai satu grup. Anda bisa menggunakan metode {@link android.support.v4.app.NotificationCompat.Builder#setGroup Builder.setGroup()} yang ada untuk membundel pemberitahuan yang sama.</p> <p> Grup pemberitahuan menerapkan hierarki pada pemberitahuan yang ada di dalamnya. Di bagian teratas hierarki adalah pemberitahuan induk yang menampilkan informasi rangkuman untuk grup tersebut. Pengguna secara bertahap bisa memperbesar grup pemberitahuan, dan sistem akan menampilkan informasi lebih banyak saat pengguna menggali lebih dalam. Bila pengguna memperbesar bundel, sistem akan memperlihatkan informasi lebih banyak untuk semua pemberitahuan anak; bila pengguna memperbesar salah satu pemberitahuan tersebut, sistem akan memperlihatkan seluruh isinya. </p> <img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x, {@docRoot}preview/images/bundles_2x.png 2x" width="300"> <p class="img-caption"> <strong>Gambar 3.</strong> Pengguna secara bertahap bisa memperluas grup pemberitahuan. </p> <p class="note"> <strong>Catatan:</strong> Jika aplikasi yang sama mengirim empat atau beberapa pemberitahuan dan tidak menetapkan pengelompokan, sistem secara otomatis akan mengelompokannya. </p> <p>Untuk mengetahui cara menambahkan pemberitahuan ke grup, lihat <a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Menambahkan Setiap Pemberitahuan ke Grup</a>.</p> <h3 id="best-practices">Praktik terbaik untuk bundel pemberitahuan</h3> <p>Bagian ini memberikan panduan tentang kapan menggunakan grup pemberitahuan sebagai ganti pemberitahuan {@link android.app.Notification.InboxStyle InboxStyle} yang telah tersedia di platform Android versi sebelumnya.</p> <h3>Kapan menggunakan bundel pemberitahuan</h3> <p>Anda harus menggunakan grup pemberitahuan hanya jika semua kondisi berikut ini bernilai benar untuk kasus penggunaan Anda:</p> <ul> <li>Pemberitahuan anak adalah pemberitahuan lengkap dan bisa ditampilkan masing-masing tanpa perlu rangkuman grup.</li> <li>Ada untungnya memunculkan pemberitahuan anak satu per satu. Misalnya: </li> <ul> <li>Mereka dapat diaplikasikan, dengan tindakan khusus untuk masing-masing anak.</li> <li>Ada lebih banyak informasi pada anak yang ingin dibaca oleh pengguna.</li> </ul> </ul> <p>Contoh kasus penggunaan yang baik untuk grup pemberitahuan antara lain: aplikasi perpesanan yang menampilkan daftar pesan yang masuk, atau aplikasi email yang menampilkan daftar email yang diterima.</p> <p> Contoh kasus penggunaan saat pemberitahuan tunggal lebih disukai meliputi pesan pribadi dari satu orang, atau representasi daftar dari item teks baris tunggal. Anda bisa menggunakan ({@link android.app.Notification.InboxStyle InboxStyle} atau {@link android.app.Notification.BigTextStyle BigTextStyle}) untuk mencapai hal ini. </p> <h3 id ="post">Menampilkan bundel pemberitahuan</h3> <p> Aplikasi ini harus selalu mengeposkan rangkuman grup, sekalipun grup hanya berisi satu anak. Sistem akan menyembunyikan rangkuman dan langsung menampilkan pemberitahuan anak jika hanya berisi pemberitahuan tunggal. Hal ini akan memastikan sistem bisa memberikan pengalaman yang konsisten saat pengguna menggeser anak grup. </p> <p class="note"> <strong>Catatan:</strong> Versi Android N ini tidak menyembunyikan rangkuman untuk grup pemberitahuan yang berisi satu anak. Fungsionalitas ini akan ditambahkan dalam Android N versi berikutnya. </p> <h3>Mengintip pemberitahuan</h3> <p>Walaupun sistem biasanya menampilkan pemberitahuan anak sebagai sebuah grup, Anda bisa menyetelnya agar muncul untuk sementara muncul sebagai <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up"> pemberitahuan pendahuluan</a>. Fitur ini khususnya berguna karena memungkinkan akses langsung ke pemberitahuan anak terbaru dan tindakan yang dikaitkan dengannya. </p> <h3>Kompatibilitas mundur</h3> <p> Baik grup pemberitahuan maupun masukan jauh telah menjadi bagian dari {@link android.app.Notification} API sejak Android 5.0 (API level 21) untuk mendukung perangkat Android Wear. Jika Anda sudah membuat pemberitahuan dengan API ini, satu-satunya tindakan yang harus Anda ambil adalah memverifikasi apakah perilaku aplikasi sesuai dengan panduan yang dijelaskan di atas, dan mempertimbangkan implementasi {@code setRemoteInputHistory()}. </p> <p> Untuk mendukung kompatibilitas mundur, tersedia API yang sama bersama kelas {@link android.support.v4.app.NotificationCompat} pustaka dukungan, yang memungkinkan Anda untuk membuat pemberitahuan yang bekerja pada versi Android sebelumnya. Pada perangkat genggam dan tablet, pengguna hanya melihat pemberitahuan rangkuman, sehingga aplikasi masih memiliki model inbox atau pemberitahuan sama yang mewakili seluruh materi informasi grup. Karena perangkat Android Wear memungkinkan pengguna melihat semua pemberitahuan anak bahkan pada level platform yang lebih lama, maka Anda harus membangun pemberitahuan anak dengan mengabaikan level API. </p> <h2 id="custom"> Tampilan Khusus</h2> <p>Mulai dari Android N, Anda bisa menyesuaikan tampilan pemberitahuan dan tetap mendapatkan dekorasi sistem seperti header pemberitahuan, tindakan, dan layout yang bisa diperluas.</p> <p>Untuk mengaktifkan kemampuan ini, Android N menambahkan API berikut untuk menata gaya tampilan khusus Anda:</p> <dl> <dt> {@code DecoratedCustomViewStyle()}</dt> <dd> Menata gaya pemberitahuan selain pemberitahuan media.</dd> <dt> {@code DecoratedMediaCustomViewStyle()}</dt> <dd> Menata gaya pemberitahuan media.</dd> </dl> <p>Untuk menggunakan API baru ini, panggil metode {@code setStyle()}, dengan meneruskan gaya tampilan khusus yang diinginkan padanya.</p> <p>Cuplikan ini menampilkan cara membuat objek pemberitahuan khusus dengan metode {@code DecoratedCustomViewStyle()}.</p> <pre> Notification notification = new Notification.Builder() .setSmallIcon(R.drawable.ic_stat_player) .setLargeIcon(albumArtBitmap)) .setCustomContentView(contentView); .setStyle(new Notification.DecoratedCustomViewStyle()) .build(); </pre> <h2 id="style">Gaya Perpesanan</h2> <p> Android N memperkenalkan API baru untuk menyesuaikan gaya pemberitahuan. Dengan menggunakan kelas <code>MessageStyle</code>, Anda bisa mengubah beberapa label yang ditampilkan pada pemberitahuan, termasuk judul percakapan, pesan tambahan, dan tampilan materi untuk pemberitahuannya. </p> <p> Cuplikan kode berikut memperagakan cara menyesuaikan sebuah gaya pemberitahuan menggunakan kelas <code>MessageStyle</code>. </p> <pre> Notification notification = new Notification.Builder() .setStyle(new Notification.MessagingStyle("Me") .setConversationTitle("Team lunch") .addMessage("Hi", timestamp1, null) // Pass in null for user. .addMessage("What's up?", timestamp2, "Coworker") .addMessage("Not much", timestamp3, null) .addMessage("How about lunch?", timestamp4, "Coworker")); </pre>