| 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> |