| page.title=Pemberitahuan |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <h2>Dalam dokumen ini</h2> |
| <ol> |
| <li><a href="#Design">Pertimbangan Desain</a></li> |
| <li><a href="#CreateNotification">Membuat Pemberitahuan</a> |
| <ol> |
| <li><a href="#Required">Isi pemberitahuan yang diperlukan</a></li> |
| <li><a href="#Optional">Isi dan pengaturan pemberitahuan opsional</a></li> |
| <li><a href="#Actions">Tindakan pemberitahuan</a></li> |
| <li><a href="#Priority">Prioritas pemberitahuan</a></li> |
| <li><a href="#SimpleNotification">Membuat pemberitahuan sederhana</a></li> |
| <li><a href="#ApplyStyle">Menerapkan layout yang diperluas pada pemberitahuan</a></li> |
| <li><a href="#Compatibility">Menangani kompatibilitas</a></li> |
| </ol> |
| </li> |
| <li><a href="#Managing">Mengelola Pemberitahuan</a> |
| <ol> |
| <li><a href="#Updating">Memperbarui pemberitahuan</a></li> |
| <li><a href="#Removing">Menghapus pemberitahuan</a></li> |
| </ol> |
| </li> |
| <li><a href="#NotificationResponse">Mempertahankan Navigasi saat Memulai Aktivitas</a> |
| <ol> |
| <li><a href="#DirectEntry">Menyiapkan PendingIntent aktivitas biasa</a></li> |
| <li><a href="#ExtendedNotification">Menyiapkan PendingIntent aktivitas khusus</a></li> |
| </ol> |
| </li> |
| <li><a href="#Progress">Menampilkan Kemajuan dalam Pemberitahuan</a> |
| <ol> |
| <li><a href="#FixedProgress">Menampilkan indikator kemajuan berdurasi tetap</a></li> |
| <li><a href="#ActivityIndicator">Menampilkan indikator aktivitas berlanjut</a></li> |
| </ol> |
| </li> |
| <li><a href="#metadata">Metadata Pemberitahuan</a></li> |
| <li><a href="#Heads-up">Pemberitahuan Pendahuluan</a></li> |
| <li><a href="#lockscreenNotification">Pemberitahuan Layar Kunci</a></li> |
| <ol> |
| <li><a href="#visibility">Mengatur Visibilitas</a></li> |
| <li><a href="#controllingMedia">Mengontrol Pemutaran Media pada Layar Kunci</a></li> |
| </ol> |
| <li><a href="#CustomNotification">Layout Pemberitahuan Custom</a></li> |
| </ol> |
| |
| <h2>Kelas-kelas utama</h2> |
| <ol> |
| <li>{@link android.app.NotificationManager}</li> |
| <li>{@link android.support.v4.app.NotificationCompat}</li> |
| </ol> |
| <h2>Video</h2> |
| <ol> |
| <li> |
| <a href="http://www.youtube.com/watch?v=Yc8YrVc47TI&feature=player_detailpage#t=1672s"> |
| Pemberitahuan di 4.1</a> |
| </li> |
| </ol> |
| <h2>Lihat juga</h2> |
| <ol> |
| <li> |
| <a href="{@docRoot}design/patterns/notifications.html">Desain Android: Pemberitahuan</a> |
| </li> |
| </ol> |
| </div> |
| </div> |
| <p> |
| Pemberitahuan adalah pesan yang bisa Anda tampilkan kepada pengguna di luar |
| UI normal aplikasi. Bila Anda memberi tahu sistem untuk mengeluarkan pemberitahuan, pemberitahuan akan muncul lebih dahulu sebagai ikon dalam |
| <strong>area pemberitahuan</strong>. Untuk melihat detail pemberitahuan, pengguna membuka |
| <strong>laci pemberitahuan</strong>. Baik area pemberitahuan maupun laci pemberitahuan |
| adalah area-area yang dikontrol sistem yang bisa dilihat pengguna kapan saja. |
| </p> |
| <img id="figure1" src="{@docRoot}images/ui/notifications/notification_area.png" height="" alt="" /> |
| <p class="img-caption"> |
| <strong>Gambar 1.</strong> Pemberitahuan di area pemberitahuan. |
| </p> |
| <img id="figure2" src="{@docRoot}images/ui/notifications/notification_drawer.png" width="280px" alt="" /> |
| <p class="img-caption"> |
| <strong>Gambar 2.</strong> Pemberitahuan di laci pemberitahuan. |
| </p> |
| |
| <p class="note"><strong>Catatan:</strong> Kecuali disebutkan, panduan ini mengacu pada |
| kelas {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder} |
| dalam <a href="{@docRoot}tools/support-library/index.html">Support Library</a> versi 4. |
| Kelas {@link android.app.Notification.Builder Notification.Builder} telah ditambahkan pada Android |
| 3.0 (API level 11).</p> |
| |
| <h2 id="Design">Pertimbangan Desain</h2> |
| |
| <p>Pemberitahuan, sebagai bagian penting dari antarmuka pengguna Android, memiliki panduan desainnya sendiri. |
| Perubahan desain materi yang diperkenalkan dalam Android 5.0 (API level 21) adalah sangat |
| penting, dan Anda harus meninjau pelatihan <a href="{@docRoot}training/material/index.html">Desain Bahan</a> |
| untuk informasi selengkapnya. Untuk mengetahui cara mendesain pemberitahuan dan interaksinya, bacalah panduan desain |
| <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>.</p> |
| |
| <h2 id="CreateNotification">Membuat Pemberitahuan</h2> |
| |
| <p>Anda menetapkan informasi dan tindakan UI bagi pemberitahuan dalam |
| objek {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}. |
| Untuk membuat pemberitahuan itu sendiri, panggil |
| {@link android.support.v4.app.NotificationCompat.Builder#build NotificationCompat.Builder.build()}, |
| yang akan mengembalikan objek {@link android.app.Notification} berisi spesifikasi Anda. Untuk mengeluarkan |
| pemberitahuan, Anda meneruskan objek {@link android.app.Notification} ke sistem dengan memanggil |
| {@link android.app.NotificationManager#notify NotificationManager.notify()}.</p> |
| |
| <h3 id="Required">Isi pemberitahuan yang diperlukan</h3> |
| <p> |
| Objek {@link android.app.Notification} <em>harus</em> berisi yang berikut ini: |
| </p> |
| <ul> |
| <li> |
| Ikon kecil, yang diatur dengan |
| {@link android.support.v4.app.NotificationCompat.Builder#setSmallIcon setSmallIcon()} |
| </li> |
| <li> |
| Judul, yang diatur dengan |
| {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()} |
| </li> |
| <li> |
| Teks detail, yang diatur dengan |
| {@link android.support.v4.app.NotificationCompat.Builder#setContentText setContentText()} |
| </li> |
| </ul> |
| <h3 id="Optional">Isi dan pengaturan pemberitahuan opsional</h3> |
| <p> |
| Semua isi dan pengaturan pemberitahuan lainnya bersifat opsional. Untuk mengetahui selengkapnya tentang semua itu, |
| lihat dokumentasi acuan untuk {@link android.support.v4.app.NotificationCompat.Builder}. |
| </p> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="Actions">Tindakan pemberitahuan</h3> |
| <p> |
| Walaupun bersifat opsional, Anda harus menambahkan setidaknya satu tindakan pada pemberitahuan. |
| Tindakan memungkinkan pengguna beralih langsung dari pemberitahuan ke |
| {@link android.app.Activity} dalam aplikasi Anda, tempat pengguna bisa melihat satu atau beberapa kejadian |
| atau melakukan pekerjaan lebih jauh. |
| </p> |
| <p> |
| Pemberitahuan bisa menyediakan beberapa tindakan sekaligus. Anda harus selalu mendefinisikan tindakan yang |
| akan diaktifkan bila pengguna mengklik pemberitahuan; biasanya tindakan ini akan membuka |
| {@link android.app.Activity} dalam aplikasi Anda. Anda juga bisa menambahkan tombol pada pemberitahuan |
| yang melakukan tindakan tambahan seperti mendiamkan alarm atau segera merespons |
| pesan teks; fitur ini tersedia mulai Android 4.1. Jika menggunakan tombol tindakan tambahan, Anda |
| juga harus membuat fungsionalitasnya tersedia dalam {@link android.app.Activity} di aplikasi Anda; lihat |
| bagian <a href="#Compatibility">Menangani kompatibilitas</a> untuk detail selengkapnya. |
| </p> |
| <p> |
| Dalam {@link android.app.Notification}, tindakan itu sendiri didefinisikan oleh |
| {@link android.app.PendingIntent} berisi |
| {@link android.content.Intent} yang memulai |
| {@link android.app.Activity} dalam aplikasi Anda. Untuk mengaitkan |
| {@link android.app.PendingIntent} dengan gestur, panggil metode |
| {@link android.support.v4.app.NotificationCompat.Builder} yang sesuai. Misalnya, jika ingin memulai |
| {@link android.app.Activity} bila pengguna mengklik teks pemberitahuan pada |
| laci pemberitahuan, tambahkan {@link android.app.PendingIntent} dengan memanggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()}. |
| </p> |
| <p> |
| Memulai {@link android.app.Activity} bila pengguna mengklik pemberitahuan adalah |
| skenario tindakan yang paling umum. Anda juga bisa memulai {@link android.app.Activity} bila pengguna |
| menghilangkan pemberitahuan. Dalam Android 4.1 dan yang lebih baru, Anda bisa memulai |
| {@link android.app.Activity} dari tombol tindakan. Untuk mengetahui selengkapnya, bacalah panduan acuan untuk |
| {@link android.support.v4.app.NotificationCompat.Builder}. |
| </p> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="Priority">Prioritas pemberitahuan</h3> |
| <p> |
| Jika diinginkan, Anda bisa mengatur prioritas pemberitahuan. Prioritas berfungsi |
| sebagai petunjuk bagi UI perangkat tentang cara menampilkan pemberitahuan. |
| Untuk mengatur prioritas pemberitahuan, panggil {@link |
| android.support.v4.app.NotificationCompat.Builder#setPriority(int) |
| NotificationCompat.Builder.setPriority()} dan teruskan salah satu konstanta prioritas {@link |
| android.support.v4.app.NotificationCompat}. Ada |
| lima level prioritas, mulai dari {@link |
| android.support.v4.app.NotificationCompat#PRIORITY_MIN} (-2) hingga {@link |
| android.support.v4.app.NotificationCompat#PRIORITY_MAX} (2); jika tidak diatur, |
| prioritas default akan ditetapkan {@link |
| android.support.v4.app.NotificationCompat#PRIORITY_DEFAULT} (0). |
| </p> |
| <p> Untuk informasi tentang mengatur level prioritas, lihat "Mengatur |
| dan mengelola prioritas pemberitahuan dengan benar" dalam panduan |
| Desain <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>. |
| </p> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="SimpleNotification">Membuat pemberitahuan sederhana</h3> |
| <p> |
| Cuplikan berikut mengilustrasikan pemberitahuan sederhana yang menetapkan aktivitas untuk dibuka bila |
| pengguna mengklik pemberitahuan. Perhatikan bahwa kode ini membuat |
| objek {@link android.support.v4.app.TaskStackBuilder} dan menggunakannya untuk membuat |
| {@link android.app.PendingIntent} untuk tindakan. Pola ini dijelaskan secara lebih detail |
| di bagian <a href="#NotificationResponse"> |
| Mempertahankan Navigasi saat Memulai Aktivitas</a>: |
| </p> |
| <pre> |
| NotificationCompat.Builder mBuilder = |
| new NotificationCompat.Builder(this) |
| .setSmallIcon(R.drawable.notification_icon) |
| .setContentTitle("My notification") |
| .setContentText("Hello World!"); |
| // Creates an explicit intent for an Activity in your app |
| Intent resultIntent = new Intent(this, ResultActivity.class); |
| |
| // The stack builder object will contain an artificial back stack for the |
| // started Activity. |
| // This ensures that navigating backward from the Activity leads out of |
| // your application to the Home screen. |
| TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); |
| // Adds the back stack for the Intent (but not the Intent itself) |
| stackBuilder.addParentStack(ResultActivity.class); |
| // Adds the Intent that starts the Activity to the top of the stack |
| stackBuilder.addNextIntent(resultIntent); |
| PendingIntent resultPendingIntent = |
| stackBuilder.getPendingIntent( |
| 0, |
| PendingIntent.FLAG_UPDATE_CURRENT |
| ); |
| mBuilder.setContentIntent(resultPendingIntent); |
| NotificationManager mNotificationManager = |
| (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
| // mId allows you to update the notification later on. |
| mNotificationManager.notify(mId, mBuilder.build()); |
| </pre> |
| <p>Demikian saja. Pengguna Anda kini telah diberi tahu.</p> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="ApplyStyle">Menerapkan layout yang diperluas pada pemberitahuan</h3> |
| <p> |
| Agar pemberitahuan muncul dalam tampilan yang diperluas, buat dahulu |
| objek {@link android.support.v4.app.NotificationCompat.Builder} dengan opsi tampilan normal |
| yang Anda inginkan. Berikutnya, panggil {@link android.support.v4.app.NotificationCompat.Builder#setStyle |
| Builder.setStyle()} dengan objek layout yang diperluas sebagai argumennya. |
| </p> |
| <p> |
| Ingatlah bahwa pemberitahuan yang diperluas tidak tersedia pada platform-platform sebelum Android 4.1. Untuk |
| mengetahui cara menangani pemberitahuan untuk Android 4.1 dan untuk platform-platform sebelumnya, bacalah |
| bagian <a href="#Compatibility">Menangani kompatibilitas</a>. |
| </p> |
| <p> |
| Misalnya, cuplikan kode berikut memperagakan cara mengubah pemberitahuan yang dibuat |
| dalam cuplikan sebelumnya untuk menggunakan layout yang diperluas: |
| </p> |
| <pre> |
| NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) |
| .setSmallIcon(R.drawable.notification_icon) |
| .setContentTitle("Event tracker") |
| .setContentText("Events received") |
| NotificationCompat.InboxStyle inboxStyle = |
| new NotificationCompat.InboxStyle(); |
| String[] events = new String[6]; |
| // Sets a title for the Inbox in expanded layout |
| inboxStyle.setBigContentTitle("Event tracker details:"); |
| ... |
| // Moves events into the expanded layout |
| for (int i=0; i < events.length; i++) { |
| |
| inboxStyle.addLine(events[i]); |
| } |
| // Moves the expanded layout object into the notification object. |
| mBuilder.setStyle(inBoxStyle); |
| ... |
| // Issue the notification here. |
| </pre> |
| |
| <h3 id="Compatibility">Menangani kompatibilitas</h3> |
| |
| <p> |
| Tidak semua fitur pemberitahuan tersedia untuk versi tertentu, walaupun |
| metode untuk mengaturnya ada dalam kelas pustaka dukungan |
| {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}. |
| Misalnya, tombol tindakan, yang bergantung pada pemberitahuan yang diperluas, hanya muncul pada Android |
| 4.1 dan lebih tinggi, karena pemberitahuan yang diperluas itu sendiri hanya tersedia pada |
| Android 4.1 dan yang lebih tinggi. |
| </p> |
| <p> |
| Untuk memastikan kompatibilitas terbaik, buatlah pemberitahuan dengan |
| {@link android.support.v4.app.NotificationCompat NotificationCompat} dan subkelasnya, |
| khususnya {@link android.support.v4.app.NotificationCompat.Builder |
| NotificationCompat.Builder}. Selain itu, ikutilah proses ini bila Anda mengimplementasikan pemberitahuan: |
| </p> |
| <ol> |
| <li> |
| Sediakan semua fungsionalitas pemberitahuan kepada semua pengguna, terlepas dari versi |
| yang mereka gunakan. Caranya, pastikan semua fungsionalitas tersedia dari |
| {@link android.app.Activity} dalam aplikasi Anda. Anda mungkin perlu menambahkan sebuah |
| {@link android.app.Activity} baru untuk melakukannya. |
| <p> |
| Misalnya, jika Anda ingin menggunakan |
| {@link android.support.v4.app.NotificationCompat.Builder#addAction addAction()} untuk |
| menyediakan kontrol yang menghentikan dan memulai pemutaran media, implementasikan dahulu |
| kontrol ini pada {@link android.app.Activity} dalam aplikasi Anda. |
| </p> |
| </li> |
| <li> |
| Pastikan semua pengguna bisa memperoleh fungsionalitas dalam {@link android.app.Activity}, |
| dengan memulainya bila pengguna mengklik pemberitahuan. Caranya, |
| buatlah {@link android.app.PendingIntent} |
| untuk {@link android.app.Activity}. Panggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent |
| setContentIntent()} untuk menambahkan {@link android.app.PendingIntent} pada pemberitahuan. |
| </li> |
| <li> |
| Kini tambahkan fitur pemberitahuan diperluas yang ingin Anda gunakan pada pemberitahuan. Ingatlah |
| bahwa setiap fungsionalitas yang Anda tambahkan juga harus tersedia dalam {@link android.app.Activity} |
| yang akan dimulai bila pengguna mengklik pemberitahuan. |
| </li> |
| </ol> |
| |
| |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h2 id="Managing">Mengelola Pemberitahuan</h2> |
| <p> |
| Bila perlu mengeluarkan pemberitahuan beberapa kali untuk tipe kejadian yang sama, |
| hindari membuat pemberitahuan yang sama sekali baru. Sebagai gantinya, Anda harus mempertimbangkan untuk memperbarui |
| pemberitahuan sebelumnya, baik dengan mengubah sebagian nilainya atau dengan menambahkan nilai, atau keduanya. |
| </p> |
| <p> |
| Misalnya, Gmail akan memberi tahu pengguna bila ada email baru dengan menambah hitungan |
| pesan tidak terbaca dan dengan menambahkan rangkuman tiap email ke pemberitahuan. Ini disebut dengan |
| "stacking" (menumpuk) pemberitahuan; hal ini dijelaskan lebih detail dalam panduan |
| Desain <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>. |
| </p> |
| <p class="note"> |
| <strong>Catatan:</strong> Fitur Gmail ini mensyaratkan layout "kotak masuk" diperluas, yang merupakan |
| bagian dari fitur pemberitahuan diperluas yang tersedia mulai Android 4.1. |
| </p> |
| <p> |
| Bagian berikut menjelaskan cara memperbarui pemberitahuan dan cara menghapusnya. |
| </p> |
| <h3 id="Updating">Memperbarui pemberitahuan</h3> |
| <p> |
| Untuk menyiapkan pemberitahuan agar bisa diperbarui, keluarkan pemberitahuan bersama ID pemberitahuan dengan |
| memanggil {@link android.app.NotificationManager#notify(int, android.app.Notification) NotificationManager.notify()}. |
| Untuk memperbarui pemberitahuan ini setelah Anda |
| mengeluarkan, memperbarui, atau membuat objek {@link android.support.v4.app.NotificationCompat.Builder}, |
| buat objek {@link android.app.Notification} darinya, dan keluarkan |
| {@link android.app.Notification} bersama ID yang sama dengan yang Anda gunakan sebelumnya. Jika |
| pemberitahuan sebelumnya tetap terlihat, sistem akan memperbaruinya dari konten |
| objek {@link android.app.Notification}. Jika pemberitahuan sebelumnya telah dihilangkan, sebuah |
| pemberitahuan baru akan dibuat. |
| </p> |
| <p> |
| Cuplikan berikut memperagakan pemberitahuan yang diperbarui untuk mencerminkan |
| jumlah kejadian yang telah terjadi. Cuplikan ini menumpuk pemberitahuan, yang menampilkan rangkuman: |
| </p> |
| <pre> |
| mNotificationManager = |
| (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
| // Sets an ID for the notification, so it can be updated |
| int notifyID = 1; |
| mNotifyBuilder = new NotificationCompat.Builder(this) |
| .setContentTitle("New Message") |
| .setContentText("You've received new messages.") |
| .setSmallIcon(R.drawable.ic_notify_status) |
| numMessages = 0; |
| // Start of a loop that processes data and then notifies the user |
| ... |
| mNotifyBuilder.setContentText(currentText) |
| .setNumber(++numMessages); |
| // Because the ID remains unchanged, the existing notification is |
| // updated. |
| mNotificationManager.notify( |
| notifyID, |
| mNotifyBuilder.build()); |
| ... |
| </pre> |
| |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="Removing">Menghapus pemberitahuan</h3> |
| <p> |
| Pemberitahuan tetap terlihat hingga salah satu kejadian berikut terjadi: |
| </p> |
| <ul> |
| <li> |
| Pengguna menghilangkan pemberitahuan satu per satu atau dengan menggunakan "Clear All" (jika |
| pemberitahuan bisa dihapus). |
| </li> |
| <li> |
| Pengguna mengklik pemberitahuan, dan Anda memanggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setAutoCancel setAutoCancel()} bila |
| Anda telah membuat pemberitahuan. |
| </li> |
| <li> |
| Anda memanggil {@link android.app.NotificationManager#cancel(int) cancel()} untuk |
| ID pemberitahuan tertentu. Metode ini juga menghapus pemberitahuan yang berjalan. |
| </li> |
| <li> |
| Anda memanggil {@link android.app.NotificationManager#cancelAll() cancelAll()}, yang menghapus |
| semua pemberitahuan yang dikeluarkan sebelumnya. |
| </li> |
| </ul> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h2 id="NotificationResponse">Mempertahankan Navigasi saat Memulai Aktivitas</h2> |
| <p> |
| Bila memulai {@link android.app.Activity} dari pemberitahuan, Anda harus mempertahankan |
| pengalaman navigasi yang diharapkan pengguna. Mengklik <i>Back</i> harus membawa pengguna kembali melalui |
| aliran pekerjaan normal aplikasi ke layar Home, dan mengklik <i>Recents</i> harus menampilkan |
| {@link android.app.Activity} sebagai tugas terpisah. Untuk mempertahankan pengalaman navigasi, Anda |
| harus memulai {@link android.app.Activity} dalam tugas baru. Cara menyiapkan |
| {@link android.app.PendingIntent} untuk memberi Anda tugas baru bergantung pada sifat |
| {@link android.app.Activity} yang Anda mulai. Ada dua situasi umum: |
| </p> |
| <dl> |
| <dt> |
| Aktivitas rutin |
| </dt> |
| <dd> |
| Anda memulai {@link android.app.Activity} yang merupakan bagian dari aliran pekerjaan normal |
| aplikasi. Dalam situasi ini, siapkan {@link android.app.PendingIntent} untuk |
| memulai tugas baru, dan sediakan {@link android.app.PendingIntent} bersama back-stack |
| yang meniru perilaku <i>Back</i> biasa. |
| <p> |
| Pemberitahuan dari aplikasi Gmail memperagakan hal ini. Bila Anda mengklik pemberitahuan untuk |
| satu pesan email, Anda akan melihat pesan itu sendiri. Menyentuh <b>Back</b> akan membawa Anda |
| kembali melalui Gmail ke layar Home, persis seperti jika memasuki Gmail dari |
| layar Home bukannya memasukinya dari pemberitahuan. |
| </p> |
| <p> |
| Hal ini terjadi terlepas dari aplikasi tempat Anda berada saat menyentuh |
| pemberitahuan. Misalnya, jika Anda dalam Gmail sedang menulis pesan, dan Anda mengklik |
| pemberitahuan untuk satu email, Anda akan segera dibawa ke email itu. Menyentuh <i>Back</i> |
| akan membawa Anda ke kotak masuk kemudian layar Home, bukannya membawa Anda ke |
| pesan yang sedang ditulis. |
| </p> |
| </dd> |
| <dt> |
| Aktivitas khusus |
| </dt> |
| <dd> |
| Pengguna hanya melihat {@link android.app.Activity} ini jika dimulai dari pemberitahuan. |
| Dalam beberapa hal, {@link android.app.Activity} akan memperluas pemberitahuan dengan menyediakan |
| informasi yang akan sulit untuk ditampilkan dalam pemberitahuan itu sendiri. Untuk situasi ini, |
| siapkan {@link android.app.PendingIntent} untuk dimulai dalam tugas baru. Tidak perlu |
| membuat back-stack, karena {@link android.app.Activity} yang dimulai bukan bagian dari |
| aliran aktivitas aplikasi. Mengklik <i>Back</i> tetap akan membawa pengguna ke |
| layar Home. |
| </dd> |
| </dl> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="DirectEntry">Menyiapkan PendingIntent aktivitas biasa</h3> |
| <p> |
| Untuk menyiapkan {@link android.app.PendingIntent} yang memulai entri langsung |
| {@link android.app.Activity}, ikuti langkah-langkah ini: |
| </p> |
| <ol> |
| <li> |
| Definisikan hierarki {@link android.app.Activity} aplikasi Anda dalam manifes. |
| <ol style="list-style-type: lower-alpha;"> |
| <li> |
| Tambahkan dukungan untuk Android 4.0.3 dan yang terdahulu. Caranya, tetapkan induk |
| {@link android.app.Activity} yang Anda mulai dengan menambahkan elemen |
| <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code> |
| sebagai anak |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>. |
| <p> |
| Untuk elemen ini, atur |
| <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a>="android.support.PARENT_ACTIVITY"</code>. |
| Atur |
| <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#val">android:value</a>="<parent_activity_name>"</code> |
| dengan <code><parent_activity_name></code> sebagai nilai |
| <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a></code> |
| untuk elemen induk |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| . Lihat XML berikut sebagai contoh. |
| </p> |
| </li> |
| <li> |
| Juga tambahkan dukungan untuk Android 4.1 dan yang lebih baru. Caranya, tambahkan atribut |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">android:parentActivityName</a></code> |
| pada elemen |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| dari {@link android.app.Activity} yang Anda mulai. |
| </li> |
| </ol> |
| <p> |
| XML akhir akan terlihat seperti ini: |
| </p> |
| <pre> |
| <activity |
| android:name=".MainActivity" |
| android:label="@string/app_name" > |
| <intent-filter> |
| <action android:name="android.intent.action.MAIN" /> |
| <category android:name="android.intent.category.LAUNCHER" /> |
| </intent-filter> |
| </activity> |
| <activity |
| android:name=".ResultActivity" |
| android:parentActivityName=".MainActivity"> |
| <meta-data |
| android:name="android.support.PARENT_ACTIVITY" |
| android:value=".MainActivity"/> |
| </activity> |
| </pre> |
| </li> |
| <li> |
| Buat back-stack berdasarkan {@link android.content.Intent} yang memulai |
| {@link android.app.Activity}: |
| <ol style="list-style-type: lower-alpha;"> |
| <li> |
| Buat {@link android.content.Intent} untuk memulai {@link android.app.Activity}. |
| </li> |
| <li> |
| Buat stack-builder (pembangun tumpukan) dengan memanggil {@link android.app.TaskStackBuilder#create |
| TaskStackBuilder.create()}. |
| </li> |
| <li> |
| Tambahkan back-stack ke stack-builder dengan memanggil |
| {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}. |
| Untuk setiap {@link android.app.Activity} dalam hierarki yang telah Anda definisikan dalam |
| manifes, back-stack berisi objek {@link android.content.Intent} yang |
| memulai {@link android.app.Activity}. Metode ini juga menambahkan flag yang memulai |
| back-stack dalam tugas baru. |
| <p class="note"> |
| <strong>Catatan:</strong> Walaupun argumen untuk |
| {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()} |
| adalah acuan ke {@link android.app.Activity} yang dimulai, panggilan metode |
| tidak akan menambahkan {@link android.content.Intent} yang memulai |
| {@link android.app.Activity}. Sebagai gantinya, hal itu ditangani dalam langkah berikutnya. |
| </p> |
| </li> |
| <li> |
| Tambahkan {@link android.content.Intent} yang memulai {@link android.app.Activity} |
| dari pemberitahuan, dengan memanggil |
| {@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}. |
| Teruskan {@link android.content.Intent} yang Anda buat dalam langkah pertama sebagai |
| argumen ke |
| {@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}. |
| </li> |
| <li> |
| Jika perlu, tambahkan argumen ke objek {@link android.content.Intent} pada |
| back-stack dengan memanggil {@link android.support.v4.app.TaskStackBuilder#editIntentAt |
| TaskStackBuilder.editIntentAt()}. Kadang-kadang perlu memastikan apakah |
| {@link android.app.Activity} target menampilkan data bermakna saat pengguna menelusurinya |
| dengan menggunakan <i>Back</i>. |
| </li> |
| <li> |
| Dapatkan {@link android.app.PendingIntent} untuk back-stack ini dengan memanggil |
| {@link android.support.v4.app.TaskStackBuilder#getPendingIntent getPendingIntent()}. |
| Anda nanti bisa menggunakan {@link android.app.PendingIntent} ini sebagai argumen untuk |
| {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent |
| setContentIntent()}. |
| </li> |
| </ol> |
| </li> |
| </ol> |
| <p> |
| Cuplikan kode berikut memperagakan prosesnya: |
| </p> |
| <pre> |
| ... |
| Intent resultIntent = new Intent(this, ResultActivity.class); |
| TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); |
| // Adds the back stack |
| stackBuilder.addParentStack(ResultActivity.class); |
| // Adds the Intent to the top of the stack |
| stackBuilder.addNextIntent(resultIntent); |
| // Gets a PendingIntent containing the entire back stack |
| PendingIntent resultPendingIntent = |
| stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); |
| ... |
| NotificationCompat.Builder builder = new NotificationCompat.Builder(this); |
| builder.setContentIntent(resultPendingIntent); |
| NotificationManager mNotificationManager = |
| (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
| mNotificationManager.notify(id, builder.build()); |
| </pre> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="ExtendedNotification">Menyiapkan PendingIntent aktivitas khusus</h3> |
| <p> |
| Bagian berikut menjelaskan cara menyiapkan aktivitas khusus |
| {@link android.app.PendingIntent}. |
| </p> |
| <p> |
| {@link android.app.Activity} khusus tidak memerlukan back-stack, sehingga Anda tidak perlu |
| mendefinisikan hierarki {@link android.app.Activity}-nya dalam manifes, dan Anda tidak perlu |
| memanggil |
| {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()} untuk membuat |
| back-stack. Sebagai gantinya, gunakan manifes untuk menyiapkan opsi tugas {@link android.app.Activity}, |
| dan buat {@link android.app.PendingIntent} dengan memanggil |
| {@link android.app.PendingIntent#getActivity getActivity()}: |
| </p> |
| <ol> |
| <li> |
| Dalam manifes, tambahkan atribut berikut pada elemen |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| untuk {@link android.app.Activity} |
| <dl> |
| <dt> |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">android:name</a>="<i>activityclass</i>"</code> |
| </dt> |
| <dd> |
| Nama kelas mutlak (fully qualified) aktivitas. |
| </dd> |
| <dt> |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">android:taskAffinity</a>=""</code> |
| </dt> |
| <dd> |
| Dikombinasikan dengan flag |
| {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK} |
| yang Anda atur dalam kode, ini memastikan bahwa {@link android.app.Activity} ini tidak |
| masuk ke dalam tugas default aplikasi. Setiap tugas yang ada yang memiliki |
| afinitas default aplikasi tidak terpengaruh. |
| </dd> |
| <dt> |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude">android:excludeFromRecents</a>="true"</code> |
| </dt> |
| <dd> |
| Mengecualikan tugas baru dari <i>Recents</i>, sehingga pengguna tidak bisa tanpa sengaja |
| mengarahkan kembali. |
| </dd> |
| </dl> |
| <p> |
| Cuplikan ini menampilkan elemen: |
| </p> |
| <pre> |
| <activity |
| android:name=".ResultActivity" |
| ... |
| android:launchMode="singleTask" |
| android:taskAffinity="" |
| android:excludeFromRecents="true"> |
| </activity> |
| ... |
| </pre> |
| </li> |
| <li> |
| Buat dan keluarkan pemberitahuan: |
| <ol style="list-style-type: lower-alpha;"> |
| <li> |
| Buat {@link android.content.Intent} yang memulai |
| {@link android.app.Activity}. |
| </li> |
| <li> |
| Atur {@link android.app.Activity} untuk dimulai dalam tugas kosong yang baru dengan memanggil |
| {@link android.content.Intent#setFlags setFlags()} dengan flag |
| {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK} |
| dan |
| {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TASK FLAG_ACTIVITY_CLEAR_TASK}. |
| </li> |
| <li> |
| Atur setiap opsi lain yang Anda perlukan untuk {@link android.content.Intent}. |
| </li> |
| <li> |
| Buat {@link android.app.PendingIntent} dari {@link android.content.Intent} |
| dengan memanggil {@link android.app.PendingIntent#getActivity getActivity()}. |
| Anda nanti bisa menggunakan {@link android.app.PendingIntent} ini sebagai argumen untuk |
| {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent |
| setContentIntent()}. |
| </li> |
| </ol> |
| <p> |
| Cuplikan kode berikut memperagakan prosesnya: |
| </p> |
| <pre> |
| // Instantiate a Builder object. |
| NotificationCompat.Builder builder = new NotificationCompat.Builder(this); |
| // Creates an Intent for the Activity |
| Intent notifyIntent = |
| new Intent(this, ResultActivity.class); |
| // Sets the Activity to start in a new, empty task |
| notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
| | Intent.FLAG_ACTIVITY_CLEAR_TASK); |
| // Creates the PendingIntent |
| PendingIntent notifyPendingIntent = |
| PendingIntent.getActivity( |
| this, |
| 0, |
| notifyIntent, |
| PendingIntent.FLAG_UPDATE_CURRENT |
| ); |
| |
| // Puts the PendingIntent into the notification builder |
| builder.setContentIntent(notifyPendingIntent); |
| // Notifications are issued by sending them to the |
| // NotificationManager system service. |
| NotificationManager mNotificationManager = |
| (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
| // Builds an anonymous Notification object from the builder, and |
| // passes it to the NotificationManager |
| mNotificationManager.notify(id, builder.build()); |
| </pre> |
| </li> |
| </ol> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h2 id="Progress">Menampilkan Kemajuan dalam Pemberitahuan</h2> |
| <p> |
| Pemberitahuan bisa menyertakan indikator kemajuan beranimasi yang menampilkan status |
| operasi yang berjalan kepada pengguna. Jika Anda bisa memperkirakan lamanya operasi berlangsung dan berapa banyak |
| yang sudah selesai pada suatu waktu, gunakan bentuk indikator yang "pasti" |
| (baris kemajuan). Jika Anda tidak bisa memperkirakan lamanya operasi, gunakan |
| bentuk indikator "tidak pasti" (indikator aktivitas). |
| </p> |
| <p> |
| Indikator kemajuan ditampilkan bersama implementasi platform |
| kelas {@link android.widget.ProgressBar}. |
| </p> |
| <p> |
| Untuk menggunakan indikator kemajuan pada platform mulai dari Android 4.0, panggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}. Untuk |
| versi sebelumnya, Anda harus membuat layout pemberitahuan custom sendiri yang |
| menyertakan tampilan {@link android.widget.ProgressBar}. |
| </p> |
| <p> |
| Bagian berikut ini menjelaskan cara menampilkan kemajuan dalam pemberitahuan dengan menggunakan |
| {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}. |
| </p> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="FixedProgress">Menampilkan indikator kemajuan berdurasi tetap</h3> |
| <p> |
| Untuk menampilkan baris kemajuan pasti, tambahkan baris itu ke pemberitahuan dengan memanggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setProgress |
| setProgress(max, progress, false)}, kemudian keluarkan pemberitahuan. Selagi operasi berlangsung, |
| tambah <code>progress</code>, dan perbarui pemberitahuan. Di akhir operasi, |
| <code>progress</code> harus sama dengan <code>max</code>. Satu cara umum memanggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()} |
| adalah mengatur <code>max</code> ke 100, kemudian tambah <code>progress</code> sebagai |
| nilai "persen selesai"untuk operasi itu. |
| </p> |
| <p> |
| Anda bisa membiarkan baris kemajuan ditampilkan saat operasi selesai, atau menghilangkannya. Dalam |
| hal apa pun, ingatlah memperbarui teks pemberitahuan untuk menampilkan bahwa operasi telah selesai. |
| Untuk menghapus baris kemajuan, panggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setProgress |
| setProgress(0, 0, false)}. Misalnya: |
| </p> |
| <pre> |
| ... |
| mNotifyManager = |
| (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
| mBuilder = new NotificationCompat.Builder(this); |
| mBuilder.setContentTitle("Picture Download") |
| .setContentText("Download in progress") |
| .setSmallIcon(R.drawable.ic_notification); |
| // Start a lengthy operation in a background thread |
| new Thread( |
| new Runnable() { |
| @Override |
| public void run() { |
| int incr; |
| // Do the "lengthy" operation 20 times |
| for (incr = 0; incr <= 100; incr+=5) { |
| // Sets the progress indicator to a max value, the |
| // current completion percentage, and "determinate" |
| // state |
| mBuilder.setProgress(100, incr, false); |
| // Displays the progress bar for the first time. |
| mNotifyManager.notify(0, mBuilder.build()); |
| // Sleeps the thread, simulating an operation |
| // that takes time |
| try { |
| // Sleep for 5 seconds |
| Thread.sleep(5*1000); |
| } catch (InterruptedException e) { |
| Log.d(TAG, "sleep failure"); |
| } |
| } |
| // When the loop is finished, updates the notification |
| mBuilder.setContentText("Download complete") |
| // Removes the progress bar |
| .setProgress(0,0,false); |
| mNotifyManager.notify(ID, mBuilder.build()); |
| } |
| } |
| // Starts the thread by calling the run() method in its Runnable |
| ).start(); |
| </pre> |
| |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h3 id="ActivityIndicator">Menampilkan indikator aktivitas berlanjut</h3> |
| <p> |
| Untuk menampilkan indikator aktivitas tidak pasti, tambahkan aktivitas ke pemberitahuan dengan |
| {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, true)} |
| (dua argumen pertama akan diabaikan), dan keluarkan pemberitahuan. Hasilnya adalah indikator |
| yang memiliki gaya yang sama dengan baris kemajuan, hanya saja animasinya terus berjalan. |
| </p> |
| <p> |
| Keluarkan pemberitahuan di awal operasi. Animasi akan berjalan hingga Anda |
| memodifikasi pemberitahuan. Bila operasi selesai, panggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, false)} |
| kemudian perbarui pemberitahuan untuk menghapus indikator aktivitas. |
| Selalu lakukan ini; jika makan animasi akan terus berjalan sekalipun operasi telah selesai. Juga |
| ingatlah mengubah teks pemberitahuan untuk menunjukkan bahwa operasi telah selesai. |
| </p> |
| <p> |
| Untuk melihat cara kerja indikator aktivitas, lihat cuplikan terdahulu. Cari lokasi baris-baris berikut: |
| </p> |
| <pre> |
| // Sets the progress indicator to a max value, the current completion |
| // percentage, and "determinate" state |
| mBuilder.setProgress(100, incr, false); |
| // Issues the notification |
| mNotifyManager.notify(0, mBuilder.build()); |
| </pre> |
| <p> |
| Ganti baris yang telah Anda temukan dengan baris berikut: |
| </p> |
| <pre> |
| // Sets an activity indicator for an operation of indeterminate length |
| mBuilder.setProgress(0, 0, true); |
| // Issues the notification |
| mNotifyManager.notify(0, mBuilder.build()); |
| </pre> |
| |
| <h2 id="metadata">Metadata Pemberitahuan</h2> |
| |
| <p>Pemberitahuan dapat disortir sesuai metadata yang Anda tetapkan dengan |
| metode {@link android.support.v4.app.NotificationCompat.Builder} berikut:</p> |
| |
| <ul> |
| <li>{@link android.support.v4.app.NotificationCompat.Builder#setCategory(java.lang.String) setCategory()} |
| memberi tahu sistem cara menangani pemberitahuan aplikasi Anda bila perangkat berada dalam mode Priority |
| (misalnya, jika pemberitahuan menyatakan suatu panggilan masuk, pesan instan, atau alarm).</li> |
| <li>{@link android.support.v4.app.NotificationCompat.Builder#setPriority(int) setPriority()} menyebabkan |
| pemberitahuan dengan bidang prioritas diatur ke {@code PRIORITY_MAX} atau {@code PRIORITY_HIGH} |
| muncul dalam jendela kecil mengambang jika pemberitahuan juga memiliki suara atau getaran.</li> |
| <li>{@link android.support.v4.app.NotificationCompat.Builder#addPerson(java.lang.String) addPerson()} |
| memungkinkan Anda menambahkan daftar orang ke pemberitahuan. Aplikasi Anda bisa menggunakannya untuk memberi isyarat pada |
| sistem bahwa sistem harus mengelompokkan bersama pemberitahuan dari orang-orang yang ditetapkan, atau memberi peringkat lebih penting pada pemberitahuan |
| untuk orang-orang ini.</li> |
| </ul> |
| |
| <div class="figure" style="width:230px"> |
| <img src="{@docRoot}images/ui/notifications/heads-up.png" alt="" width="" height="" id="figure3" /> |
| <p class="img-caption"> |
| <strong>Gambar 3.</strong> Aktivitas layar penuh yang menampilkan pemberitahuan pendahuluan |
| </p> |
| </div> |
| |
| <h2 id="Heads-up">Pemberitahuan Pendahuluan</h2> |
| |
| <p>Dengan Android 5.0 (API level 21), pemberitahuan bisa muncul dalam jendela kecil mengambang |
| (yang disebut juga dengan <em>pemberitahuan pendahuluan</em>) saat perangkat aktif |
| (yakni, perangkat dibuka kuncinya dan layarnya menyala). Pemberitahuan ini |
| muncul seperti bentuk ringkas pemberitahuan Anda, hanya saja |
| pemberitahuan pendahuluan juga menampilkan tombol tindakan. Pengguna bisa menindaklanjuti atau mengabaikan, |
| pemberitahuan pendahuluan tanpa meninggalkan aplikasi saat ini.</p> |
| |
| <p>Contoh-contoh kondisi yang dapat memicu pemberitahuan pendahuluan antara lain:</p> |
| |
| <ul> |
| <li>Aktivitas pengguna berada dalam mode layar penuh (aplikasi menggunakan |
| {@link android.app.Notification#fullScreenIntent}), atau</li> |
| <li>Pemberitahuan memiliki prioritas tinggi dan menggunakan nada dering atau |
| getaran</li> |
| </ul> |
| |
| <h2 id="lockscreenNotification">Pemberitahuan Layar Kunci</h2> |
| |
| <p>Dengan rilis Android 5.0 (API level 21), pemberitahuan kini dapat muncul pada |
| layar kunci. Aplikasi Anda bisa menggunakan fungsionalitas ini untuk menyediakan kontrol pemutaran media dan |
| tindakan umum lainnya. Pengguna bisa memilih lewat Settings apakah akan menampilkan pemberitahuan pada layar kunci, dan |
| Anda bisa mendesain apakah pemberitahuan aplikasi akan terlihat pada layar kunci.</p> |
| |
| <h3 id="visibility">Mengatur Visibilitas</h3> |
| |
| <p>Aplikasi Anda bisa mengatur level detail terlihat pada pemberitahuan yang ditampilkan di |
| layar kunci aman. Anda memanggil {@link android.support.v4.app.NotificationCompat.Builder#setVisibility(int) setVisibility()} |
| dan menetapkan salah satu nilai berikut:</p> |
| |
| <ul> |
| <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC} menampilkan isi lengkap |
| pemberitahuan.</li> |
| <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_SECRET} tidak menampilkan bagian apa pun dari |
| pemberitahuan ini pada layar kunci.</li> |
| <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PRIVATE} menampilkan informasi dasar, |
| misalnya ikon dan judul isi pemberitahuan, namun menyembunyikan isi lengkap pemberitahuan.</li> |
| </ul> |
| |
| <p>Bila {@link android.support.v4.app.NotificationCompat#VISIBILITY_PRIVATE} telah diatur, Anda juga bisa |
| menyediakan versi alternatif isi pemberitahuan yang menyembunyikan detail tertentu. Misalnya, |
| aplikasi SMS dapat menampilkan pemberitahuan yang menampilkan <em>Anda memiliki 3 pesan teks baru</em>, namun menyembunyikan |
| isi dan pengirim pesan. Untuk menyediakan pemberitahuan alternatif ini, buat dahulu pemberitahuan |
| pengganti menggunakan {@link android.support.v4.app.NotificationCompat.Builder}. Bila Anda membuat |
| objek pemberitahuan privat, lampirkan pemberitahuan pengganti melalui metode |
| {@link android.support.v4.app.NotificationCompat.Builder#setPublicVersion(android.app.Notification) setPublicVersion()} |
| .</p> |
| |
| <h3 id="controllingMedia">Mengontrol Pemutaran Media pada Layar Kunci</h3> |
| |
| <p>Dalam Android 5.0 (API level 21) layar kunci tidak lagi menampilkan kontrol media |
| berdasarkan {@link android.media.RemoteControlClient}, yang sekarang telah dihilangkan. Sebagai gantinya, gunakan |
| template {@link android.app.Notification.MediaStyle} dengan metode |
| {@link android.app.Notification.Builder#addAction(android.app.Notification.Action) addAction()} |
| , yang mengubah tindakan menjadi ikon yang bisa diklik.</p> |
| |
| <p class="note"><strong>Catatan:</strong> Template dan metode {@link android.app.Notification.Builder#addAction(android.app.Notification.Action) addAction()} |
| tidak disertakan dalam pustaka dukungan, sehingga fitur-fitur ini berjalan pada Android 5.0 dan yang lebih tinggi |
| saja.</p> |
| |
| <p>Untuk menampilkan kontrol pemutaran media di layar kunci dalam Android 5.0, atur visibilitas |
| ke {@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC}, seperti dijelaskan di atas. Kemudian tambahkan |
| tindakan dan atur template {@link android.app.Notification.MediaStyle}, seperti dijelaskan dalam contoh kode |
| berikut:</p> |
| |
| <pre> |
| Notification notification = new Notification.Builder(context) |
| // Show controls on lock screen even when user hides sensitive content. |
| .setVisibility(Notification.VISIBILITY_PUBLIC) |
| .setSmallIcon(R.drawable.ic_stat_player) |
| // Add media control buttons that invoke intents in your media service |
| .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0 |
| .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1 |
| .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2 |
| // Apply the media style template |
| .setStyle(new Notification.MediaStyle() |
| .setShowActionsInCompactView(1 /* #1: pause button */) |
| .setMediaSession(mMediaSession.getSessionToken()) |
| .setContentTitle("Wonderful music") |
| .setContentText("My Awesome Band") |
| .setLargeIcon(albumArtBitmap) |
| .build(); |
| </pre> |
| |
| <p class="note"><strong>Catatan:</strong> Dihilangkannya {@link android.media.RemoteControlClient} |
| memiliki implikasi lebih jauh untuk mengontrol media. Lihat |
| <a href="{@docRoot}about/versions/android-5.0.html#MediaPlaybackControl">Kontrol Pemutaran Media</a> |
| untuk informasi selengkapnya tentang API baru untuk mengelola sesi media dan mengontrol pemutaran.</p> |
| |
| |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h2 id="CustomNotification">Layout Pemberitahuan Custom</h2> |
| <p> |
| Kerangka kerja pemberitahuan memungkinkan Anda mendefinisikan layout pemberitahuan custom, yang |
| mendefinisikan penampilan pemberitahuan dalam objek {@link android.widget.RemoteViews}. |
| Pemberitahuan dengan layout custom serupa pemberitahuan normal, namun dibuat berdasarkan |
| {@link android.widget.RemoteViews} yang didefinisikan dalam file layout XML. |
| </p> |
| <p> |
| Tinggi yang tersedia untuk layout pemberitahuan custom bergantung pada tampilan pemberitahuan. Layout |
| tampilan normal dibatasi hingga 64 dp, dan layout tampilan yang diperluas dibatasi hingga 256 dp. |
| </p> |
| <p> |
| Untuk mendefinisikan layout pemberitahuan custom, mulailah dengan membuat instance |
| objek {@link android.widget.RemoteViews} yang memekarkan file layout XML. Kemudian, |
| sebagai ganti memanggil metode seperti |
| {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()}, |
| panggil {@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}. Untuk mengatur |
| detail isi pemberitahuan custom, gunakan metode dalam |
| {@link android.widget.RemoteViews} untuk mengatur nilai anak tampilan: |
| </p> |
| <ol> |
| <li> |
| Buat layout XML untuk pemberitahuan di file terpisah. Anda bisa menggunakan nama file |
| apa saja yang diinginkan, namun Anda harus menggunakan ekstensi <code>.xml</code> |
| </li> |
| <li> |
| Dalam aplikasi Anda, gunakan metode {@link android.widget.RemoteViews} untuk mendefinisikan |
| ikon dan teks pemberitahuan. Masukkan objek {@link android.widget.RemoteViews} ini ke dalam |
| {@link android.support.v4.app.NotificationCompat.Builder} Anda dengan memanggil |
| {@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}. Hindari |
| mengatur {@link android.graphics.drawable.Drawable} latar belakang pada |
| objek {@link android.widget.RemoteViews} Anda, karena warna teks bisa menjadi tidak terbaca. |
| </li> |
| </ol> |
| <p> |
| Kelas {@link android.widget.RemoteViews} juga menyertakan metode yang bisa Anda gunakan untuk |
| menambahkan {@link android.widget.Chronometer} atau {@link android.widget.ProgressBar} |
| dengan mudah ke layout pemberitahuan Anda. Untuk informasi selengkapnya tentang cara membuat layout custom |
| pemberitahuan Anda, lihat dokumentasi acuan {@link android.widget.RemoteViews}. |
| </p> |
| <p class="caution"> |
| <strong>Perhatian:</strong> Bila Anda menggunakan layout pemberitahuan custom, berhati-hatilah |
| untuk memastikan bahwa layout custom itu bekerja pada berbagai orientasi dan resolusi perangkat. Walaupun |
| berlaku bagi semua layout View, nasihat ini khususnya penting untuk pemberitahuan karena |
| ruang di laci pemberitahuan sangat terbatas. Jangan buat layout custom terlalu |
| kompleks, dan pastikan mengujinya di berbagai konfigurasi. |
| </p> |
| <!-- ------------------------------------------------------------------------------------------ --> |
| <h4>Menggunakan sumber daya gaya untuk teks pemberitahuan custom</h4> |
| <p> |
| Selalu gunakan sumber daya gaya untuk teks pemberitahuan custom. Warna latar belakang |
| pemberitahuan bisa bervariasi di berbagai perangkat dan versi, dan menggunakan sumber daya gaya |
| membantu Anda menangani hal ini. Mulai Android 2.3, sistem mendefinisikan sebuah gaya untuk |
| teks layout pemberitahuan standar. Jika Anda menggunakan gaya yang sama dalam aplikasi yang menargetkan Android |
| 2.3 atau yang lebih tinggi, Anda akan memastikan bahwa teks terlihat pada latar belakang tampilan. |
| </p> |