• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Pemberitahuan
2page.tags=pemberitahuan
3helpoutsWidget=true
4page.image=/preview/images/notifications-card.png
5
6trainingnavtop=true
7
8@jd:body
9
10<div id="qv-wrapper">
11<div id="qv">
12
13<!-- table of contents -->
14<h2>Dokumen ini berisi</h2>
15<ol>
16  <li><a href="#direct">Balasan Langsung</a></li>
17  <li><a href="#bundle">Bundel Pemberitahuan</a></li>
18  <li><a href="#custom">Tampilan Khusus</a></li>
19  <li><a href="#style">Gaya Pesan</a></li>
20</ol>
21
22</div>
23</div>
24
25<p>Android N memperkenalkan beberapa API baru yang memungkinkan aplikasi untuk mengeposkan
26pemberitahuan yang sangat mudah terlihat dan interaktif.</p>
27
28<p>Android N menambahkan API pemberitahuan{@link android.support.v4.app.RemoteInput}
29yang ada untuk mendukung balasan inline pada handset. Fitur ini memungkinkan pengguna
30 merespons dengan cepat dari bayangan pemberitahuan tanpa mengunjungi aplikasi Anda.</p>
31
32<p>
33  Android N juga memungkinkan Anda menggabungkan pemberitahuan yang serupa agar
34  muncul sebagai satu pemberitahuan. Untuk memungkinkan hal ini, Android N menggunakan metode {@link
35  android.support.v4.app.NotificationCompat.Builder#setGroup
36  NotificationCompat.Builder.setGroup()} yang sudah ada. Pengguna bisa memperluas setiap
37  pemberitahuan, dan melakukan tindakan seperti membalas dan menutup setiap
38  pemberitahuan, satu per satu dari bayangan pemberitahuan.
39</p>
40
41<p>Terakhir, Android N juga menambahkan API baru yang memungkinkan Anda untuk memanfaatkan dekorasi
42sistem dalam tampilan pemberitahuan yang disesuaikan untuk aplikasi Anda. API ini membantu
43memastikan semua tampilan pemberitahuan sama-sama menggunakan penyajian yang konsisten dengan
44template standar.</p>
45
46<p>Dokumen ini menyoroti beberapa perubahan penting yang harus Anda
47 perhitungkan saat menggunakan fitur pemberitahuan baru dalam aplikasi Anda.</p>
48
49<h2 id="direct">Balasan Langsung</h2>
50
51<p>Dengan fitur Balasan Langsung di Android N, pengguna bisa dengan cepat
52merespons pesan teks atau memperbarui daftar tugas secara langsung dalam antarmuka
53pemberitahuan. Pada perangkat genggam, tindakan balasan inline muncul sebagai tombol tambahan
54 yang dilampirkan pada pemberitahuan. Bila pengguna membalas lewat keyboard, sistem akan melampirkan
55 respons teks ke intent
56    yang telah Anda tetapkan untuk tindakan pemberitahuan dan mengirimkan intent ke
57     aplikasi perangkat genggam Anda.
58
59
60<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
61  {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
62<p class="img-caption">
63  <strong>Gambar 1.</strong> Android N menambahkan tombol tindakan <strong>Reply</strong>.
64
65</p>
66
67<h3>Menambahkan tindakan balasan inline</h3>
68
69<p>Untuk membuat tindakan pemberitahuan yang mendukung balasan langsung:
70</p>
71
72<ol>
73<li>Buat instance {@link android.support.v4.app.RemoteInput.Builder}
74 yang bisa Anda tambahkan ke tindakan
75pemberitahuan. Konstruktor kelas ini akan menerima string bahwa sistem menggunakannya sebagai kunci
76 untuk masukan teks. Kemudian, aplikasi perangkat genggam Anda akan menggunakan kunci itu untuk mengambil teks
77  masukan tersebut.
78
79<pre>
80// Key for the string that's delivered in the action's intent.
81private static final String KEY_TEXT_REPLY = "key_text_reply";
82String replyLabel = getResources().getString(R.string.reply_label);
83RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
84        .setLabel(replyLabel)
85        .build();
86</pre>
87</li>
88<li>Lampirkan objek {@link android.support.v4.app.RemoteInput}
89 pada tindakan dengan menggunakan <code>addRemoteInput()</code>.
90
91<pre>
92// Create the reply action and add the remote input.
93Notification.Action action =
94        new Notification.Action.Builder(R.drawable.ic_reply_icon,
95                getString(R.string.label), replyPendingIntent)
96                .addRemoteInput(remoteInput)
97                .build();
98</pre>
99</li>
100
101<li>Terapkan tindakan pada pemberitahuan dan keluarkan pemberitahuan.
102
103<pre>
104// Build the notification and add the action.
105Notification newMessageNotification =
106        new Notification.Builder(mContext)
107                .setSmallIcon(R.drawable.ic_message)
108                .setContentTitle(getString(R.string.title))
109                .setContentText(getString(R.string.content))
110                .addAction(action))
111                .build();
112
113// Issue the notification.
114NotificationManager notificationManager =
115        NotificationManager.from(mContext);
116notificationManager.notify(notificationId, newMessageNotification);
117
118</pre>
119</li>
120
121</ol>
122
123
124<p> Sistem akan meminta pengguna memasukkan respons bila mereka memicu
125tindakan pemberitahuan. </p>
126
127<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
128    {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
129<p class="img-caption">
130  <strong>Gambar 2.</strong> Pengguna memasukkan teks dari bayangan pemberitahuan.
131</p>
132
133<h3>
134  Mengambil masukan pengguna dari balasan inline
135</h3>
136
137<p>
138  Untuk menerima masukan pengguna dari antarmuka pemberitahuan ke aktivitas yang Anda
139deklarasikan dalam intent tindakan balasan:
140</p>
141
142<ol>
143  <li>Panggil {@link android.support.v4.app.RemoteInput#getResultsFromIntent
144  getResultsFromIntent()} dengan meneruskan intent tindakan pemberitahuan sebagai
145  parameter masukan. Metode ini mengembalikan {@link android.os.Bundle} yang
146  berisi respons teks.
147
148    <pre>
149Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
150</pre>
151  </li>
152
153  <li>Lakukan kueri pada bundel menggunakan kunci hasil (diberikan ke konstruktor {@link
154  android.support.v4.app.RemoteInput.Builder}). Anda bisa menyelesaikan
155  proses ini dan mengambil teks masukan dengan membuat sebuah metode, seperti dalam
156  cuplikan kode berikut:
157
158    <pre>
159// Obtain the intent that started this activity by calling
160// Activity.getIntent() and pass it into this method to
161// get the associated string.
162
163private CharSequence getMessageText(Intent intent) {
164    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
165    if (remoteInput != null) {
166        return remoteInput.getCharSequence(KEY_TEXT_REPLY);
167    }
168    return null;
169 }
170</pre>
171  </li>
172
173  <li>Kompilasilah dan keluarkan pemberitahuan lain, menggunakan ID pemberitahuan yang sama dengan
174  yang Anda berikan untuk pemberitahuan sebelumnya. Indikator kemajuan
175    menghilang dari antarmuka pemberitahuan untuk memberi tahu pengguna mengenai balasan
176    yang berhasil. Saat menangani pemberitahuan baru ini, gunakan konteks yang
177    diteruskan ke metode {@code onReceive()} penerima.
178
179    <pre>
180// Build a new notification, which informs the user that the system
181// handled their interaction with the previous notification.
182Notification repliedNotification =
183        new Notification.Builder(context)
184                .setSmallIcon(R.drawable.ic_message)
185                .setContentText(getString(R.string.replied))
186                .build();
187
188// Issue the new notification.
189NotificationManager notificationManager =
190        NotificationManager.from(context);
191notificationManager.notify(notificationId, repliedNotification);
192</pre>
193  </li>
194</ol>
195
196<p>
197  Untuk aplikasi interaktif, seperti chat, akan berguna bila menyertakan
198  konteks tambahan saat menangani teks yang diambil. Misalnya, aplikasi ini bisa menampilkan
199  beberapa baris riwayat chat sekaligus. Bila pengguna merespons melalui {@link
200  android.support.v4.app.RemoteInput}, Anda bisa memperbarui riwayat balasan
201  menggunakan metode {@code setRemoteInputHistory()}.
202</p>
203
204<p>
205  Pemberitahuan harus diperbarui atau dibatalkan setelah aplikasi
206 menerima masukan jarak jauh. Bila pengguna membalas ke pembaruan jarak jauh
207  menggunakan Balasan Langsung,
208  jangan batalkan pemberitahuan. Melainkan, perbarui pemberitahuan untuk menampilkan balasan pengguna.
209Untuk pemberitahuan yang menggunakan {@code MessagingStyle}, Anda harus menambahkan
210balasannya sebagai pesan terbaru. Saat menggunakan template lain, Anda bisa
211menambahkan balasan pengguna ke riwayat masukan jarak jauh.
212</p>
213
214<h2 id="bundle">Bundel Pemberitahuan</h2>
215
216<p>Android N membekali pengembang dengan sebuah cara baru untuk menyatakan
217 antrean pemberitahuan: <i>bundel pemberitahuan</i>. Ini mirip dengan fitur
218  <a href="{@docRoot}training/wearables/notifications/stacks.html">Tumpukan
219  Pemberitahuan</a> dalam Android Wear. Misalnya, jika aplikasi Anda membuat pemberitahuan
220  untuk pesan yang diterima, bila lebih dari satu pesan diterima, pemberitahuan tersebut akan
221 dibundel sebagai satu grup. Anda bisa
222 menggunakan metode {@link android.support.v4.app.NotificationCompat.Builder#setGroup
223Builder.setGroup()} yang ada untuk membundel pemberitahuan yang sama.</p>
224
225<p>
226  Grup pemberitahuan menerapkan hierarki pada pemberitahuan yang ada di dalamnya.
227  Di bagian teratas hierarki adalah pemberitahuan induk yang menampilkan informasi
228  rangkuman untuk grup tersebut. Pengguna secara bertahap bisa
229  memperbesar grup pemberitahuan, dan sistem akan menampilkan informasi lebih banyak saat
230  pengguna menggali lebih dalam. Bila pengguna memperbesar bundel, sistem akan memperlihatkan informasi lebih
231  banyak untuk semua pemberitahuan anak; bila pengguna
232  memperbesar salah satu pemberitahuan tersebut, sistem akan memperlihatkan seluruh isinya.
233</p>
234
235<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
236          {@docRoot}preview/images/bundles_2x.png 2x" width="300">
237<p class="img-caption">
238  <strong>Gambar 3.</strong> Pengguna secara bertahap bisa memperluas grup
239  pemberitahuan.
240</p>
241
242<p class="note">
243  <strong>Catatan:</strong> Jika aplikasi yang sama mengirim empat atau beberapa pemberitahuan
244  dan tidak menetapkan pengelompokan,
245  sistem secara otomatis akan mengelompokannya.
246</p>
247
248<p>Untuk mengetahui cara menambahkan pemberitahuan ke grup, lihat
249<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Menambahkan
250Setiap Pemberitahuan ke Grup</a>.</p>
251
252
253<h3 id="best-practices">Praktik terbaik untuk bundel pemberitahuan</h3>
254<p>Bagian ini memberikan panduan tentang kapan menggunakan grup pemberitahuan sebagai ganti
255pemberitahuan {@link android.app.Notification.InboxStyle InboxStyle}
256yang telah tersedia di
257platform Android versi sebelumnya.</p>
258
259<h3>Kapan menggunakan bundel pemberitahuan</h3>
260
261<p>Anda harus menggunakan grup pemberitahuan hanya jika semua kondisi berikut ini
262bernilai benar untuk kasus penggunaan Anda:</p>
263
264<ul>
265  <li>Pemberitahuan anak adalah pemberitahuan lengkap dan bisa ditampilkan
266   masing-masing tanpa perlu rangkuman grup.</li>
267  <li>Ada untungnya memunculkan pemberitahuan anak satu per satu. Misalnya:
268
269  </li>
270  <ul>
271    <li>Mereka dapat diaplikasikan, dengan tindakan khusus untuk masing-masing anak.</li>
272    <li>Ada lebih banyak informasi pada anak yang ingin dibaca oleh pengguna.</li>
273  </ul>
274</ul>
275
276<p>Contoh kasus penggunaan yang baik untuk grup pemberitahuan antara lain: aplikasi perpesanan
277yang menampilkan daftar pesan yang masuk, atau aplikasi email yang menampilkan daftar email
278yang diterima.</p>
279
280<p>
281Contoh kasus penggunaan saat pemberitahuan tunggal lebih disukai
282 meliputi pesan pribadi dari satu orang, atau representasi daftar dari
283 item teks baris tunggal. Anda bisa menggunakan
284({@link android.app.Notification.InboxStyle InboxStyle} atau
285{@link android.app.Notification.BigTextStyle BigTextStyle}) untuk mencapai
286hal ini.
287</p>
288
289<h3 id ="post">Menampilkan bundel pemberitahuan</h3>
290
291<p>
292  Aplikasi ini harus selalu mengeposkan rangkuman grup, sekalipun grup hanya berisi
293  satu anak. Sistem akan menyembunyikan rangkuman dan langsung menampilkan
294  pemberitahuan anak jika hanya berisi pemberitahuan tunggal. Hal ini akan memastikan
295  sistem bisa memberikan pengalaman yang konsisten saat pengguna menggeser
296  anak grup.
297</p>
298
299<p class="note">
300  <strong>Catatan:</strong> Versi Android N ini tidak menyembunyikan
301  rangkuman untuk grup pemberitahuan yang berisi satu anak. Fungsionalitas
302  ini akan ditambahkan dalam Android N versi berikutnya.
303</p>
304
305<h3>Mengintip pemberitahuan</h3>
306
307<p>Walaupun sistem biasanya menampilkan pemberitahuan anak sebagai sebuah grup, Anda bisa menyetelnya
308 agar muncul untuk sementara muncul sebagai
309 <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
310 pemberitahuan pendahuluan</a>. Fitur ini khususnya berguna karena memungkinkan
311  akses langsung ke pemberitahuan anak terbaru dan tindakan yang dikaitkan dengannya.
312</p>
313
314
315<h3>Kompatibilitas mundur</h3>
316
317<p>
318  Baik grup pemberitahuan maupun masukan jauh telah menjadi bagian dari {@link
319  android.app.Notification} API sejak Android 5.0 (API level 21) untuk mendukung
320  perangkat Android Wear. Jika Anda sudah membuat pemberitahuan dengan API ini,
321  satu-satunya tindakan yang harus Anda ambil adalah memverifikasi apakah perilaku aplikasi sesuai dengan panduan yang
322  dijelaskan di atas, dan mempertimbangkan implementasi {@code
323  setRemoteInputHistory()}.
324</p>
325
326<p>
327  Untuk mendukung kompatibilitas mundur, tersedia API yang sama bersama
328  kelas {@link android.support.v4.app.NotificationCompat}
329  pustaka dukungan, yang memungkinkan Anda untuk membuat pemberitahuan yang bekerja pada versi Android
330  sebelumnya. Pada perangkat genggam dan tablet, pengguna hanya melihat pemberitahuan rangkuman,
331  sehingga aplikasi masih memiliki model inbox atau pemberitahuan sama yang
332  mewakili seluruh materi informasi grup. Karena perangkat Android
333  Wear memungkinkan pengguna melihat semua pemberitahuan anak bahkan pada level platform
334  yang lebih lama, maka Anda harus membangun pemberitahuan anak dengan mengabaikan level
335  API.
336</p>
337
338<h2 id="custom"> Tampilan Khusus</h2>
339<p>Mulai dari Android N, Anda bisa menyesuaikan tampilan pemberitahuan dan
340tetap mendapatkan dekorasi sistem seperti header pemberitahuan, tindakan, dan
341layout yang bisa diperluas.</p>
342
343<p>Untuk mengaktifkan kemampuan ini, Android N menambahkan API berikut untuk menata gaya
344  tampilan khusus Anda:</p>
345
346<dl>
347<dt>
348{@code DecoratedCustomViewStyle()}</dt>
349<dd> Menata gaya pemberitahuan selain pemberitahuan
350media.</dd>
351<dt>
352{@code DecoratedMediaCustomViewStyle()}</dt>
353<dd> Menata gaya pemberitahuan media.</dd>
354</dl>
355
356<p>Untuk menggunakan API baru ini, panggil metode {@code setStyle()}, dengan meneruskan
357gaya tampilan khusus yang diinginkan padanya.</p>
358
359<p>Cuplikan ini menampilkan cara membuat objek pemberitahuan khusus dengan metode
360{@code DecoratedCustomViewStyle()}.</p>
361
362<pre>
363Notification notification = new Notification.Builder()
364           .setSmallIcon(R.drawable.ic_stat_player)
365           .setLargeIcon(albumArtBitmap))
366           .setCustomContentView(contentView);
367           .setStyle(new Notification.DecoratedCustomViewStyle())
368           .build();
369
370</pre>
371
372<h2 id="style">Gaya Perpesanan</h2>
373<p>
374  Android N memperkenalkan API baru untuk menyesuaikan gaya pemberitahuan.
375  Dengan menggunakan kelas <code>MessageStyle</code>, Anda bisa mengubah beberapa
376  label yang ditampilkan pada pemberitahuan, termasuk judul percakapan,
377  pesan tambahan, dan tampilan materi untuk pemberitahuannya.
378</p>
379
380<p>
381  Cuplikan kode berikut memperagakan cara menyesuaikan sebuah
382  gaya pemberitahuan menggunakan kelas <code>MessageStyle</code>.
383</p>
384
385<pre>
386  Notification notification = new Notification.Builder()
387             .setStyle(new Notification.MessagingStyle("Me")
388                 .setConversationTitle("Team lunch")
389                 .addMessage("Hi", timestamp1, null) // Pass in null for user.
390                 .addMessage("What's up?", timestamp2, "Coworker")
391                 .addMessage("Not much", timestamp3, null)
392                 .addMessage("How about lunch?", timestamp4, "Coworker"));
393</pre>
394