• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Android N for Developers
2meta.tags="preview", "androidn"
3page.tags="preview", "developer preview"
4page.image=images/cards/card-n-apis_2x.png
5@jd:body
6
7
8
9
10<div id="qv-wrapper">
11<div id="qv">
12  <h2>Fitur-fitur Utama bagi Pengembang</h2>
13  <ol>
14      <ul style="list-style-type:none;">
15        <li><a href="#multi-window_support">Dukungan Multi-Jendela</a></li>
16        <li><a href="#notification_enhancements">Pemberitahuan</a></li>
17        <li><a href="#jit_aot">Kompilasi JIT/AOT</a></li>
18        <li><a href="#quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</a></li>
19        <li><a href="#doze_on_the_go">Istirahatkan Kapan Saja</a></li>
20        <li><a href="#background_optimizations">Optimalisasi Latar Belakang</a></li>
21        <li><a href="#data_saver">Data Saver</a></li>
22        <li><a href="#vulkan">Vulkan API</a></li>
23        <li><a href="#tile_api">Quick Settings Tile API</a></li>
24        <li><a href="#number-blocking">Pemblokiran Nomor</a></li>
25        <li><a href="#call_screening">Penyaringan Panggilan</a></li>
26        <li><a href="#multi-locale_languages">Lokal dan Bahasa</a></li>
27        <li><a href="#emoji">Emoji Baru</a></li>
28        <li><a href="#icu4">ICU4J API di Android</a></li>
29        <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
30        <li><a href="#android_tv_recording">Perekaman Android TV</a></li>
31        <li><a href="#android_for_work">Android for Work</a></li>
32        <li><a href="#accessibility_enhancements">Aksesibilitas</a></li>
33        <li><a href="#direct_boot">Direct Boot</a></li>
34        <li><a href="#key_attestation">Key Attestation</a></li>
35        <li><a href="#network_security_config">Network Security Config</a></li>
36        <li><a href="#default_trusted_ca">CA Tepercaya Default</a></li>
37        <li><a href="#apk_signature_v2">APK Signature Scheme V2</a></li>
38        <li><a href="#scoped_directory_access">Scoped Directory Access</a></li>
39        <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
40        <li><a href="#sustained_performance_api">Sustained Performance API</a></li>
41        <li><a href="#vr">Dukungan VR</a></li>
42        <li><a href="#print_svc">Penyempurnaan Layanan Cetak</a></li>
43        <li><a href="#virtual_files">File Maya</a></li>
44        <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
45      </ol>
46</div>
47</div>
48
49
50
51<p>Android N masih dalam pengembangan aktif, namun Anda bisa mencobanya
52sekarang sebagai bagian dari N Developer Preview. Bagian-bagian di bawah ini akan menyoroti sebagian dari
53fitur baru untuk pengembang. </p>
54
55<p>
56  Pastikan memeriksa <a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a> untuk mengetahui selengkapnya tentang
57  bagian-bagian perubahan platform yang bisa memengaruhi aplikasi Anda, lihatlah
58  panduan pengembang untuk mengetahui selengkapnya tentang fitur-fitur utama, dan unduh <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> untuk mengetahui detail tentang
59  API baru.
60</p>
61
62<h2 id="multi-window_support">Dukungan Multi-Jendela</h2>
63
64
65<p>Di Android N, kami memperkenalkan fitur multitasking baru dan yang banyak diminta
66ke dalam platform &mdash; dukungan multi-jendela. </p>
67
68  <p>Pengguna sekarang bisa membuka dua aplikasi sekaligus di layar. </p>
69  <ul>
70  <li>Pada ponsel dan tablet
71yang menjalankan Android N, pengguna bisa menjalankan dua aplikasi secara berdampingan atau
72satu aplikasi di atas yang lain dalam mode layar terbagi. Pengguna bisa mengubah ukuran aplikasi dengan menyeret
73pembagi di antara keduanya. </li>
74
75<li>Pada perangkat Android TV, aplikasi bisa menempatkan dirinya sendiri dalam <a href="{@docRoot}preview/features/picture-in-picture.html">mode
76gambar-dalam-gambar</a>, sehingga aplikasi bisa terus menampilkan materi sementara pengguna menjelajahi atau
77berinteraksi dengan aplikasi lain.</li>
78  </ul>
79
80<div class="col-4of10">
81<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
82<p class="img-caption">
83  <strong>Gambar 1.</strong> Aplikasi yang berjalan dalam mode layar terbagi.
84</p>
85
86  </div>
87
88<p>Khususnya pada tablet dan perangkat yang berlayar lebih besar lainnya, dukungan multi-jendela
89memberi Anda cara baru untuk memikat pengguna. Anda bahkan bisa mengaktifkan fitur seret-dan-lepas di
90aplikasi untuk memudahkan pengguna menyeret materi ke dan dari aplikasi &mdash; cara bagus
91untuk menyempurnakan pengalaman pengguna Anda. </p>
92
93<p>Tidak sulit menambahkan dukungan multi-jendela ke aplikasi Anda dan mengonfigurasi cara
94menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi
95minimum yang diizinkan aktivitas, sehingga mencegah pengguna mengubah ukuran aktivitas di bawah
96ukuran itu. Anda juga bisa menonaktifkan tampilan multi-jendela untuk aplikasi Anda, yang
97  akan memastikan sistem hanya menampilkan aplikasi dalam mode layar penuh.</p>
98
99<p>
100  Untuk informasi selengkapnya, lihat dokumentasi pengembang <a href="{@docRoot}preview/features/multi-window.html">Dukungan Multi-Jendela</a>.
101
102</p>
103
104<h2 id="notification_enhancements">Penyempurnaan Pemberitahuan</h2>
105
106<p>Di Android N kami telah mengubah desain pemberitahuan agar lebih mudah dan lebih cepat
107digunakan. Beberapa perubahan tersebut antara lain:</p>
108
109<ul>
110  <li>
111    <strong>Pembaruan template</strong>: Kami telah memperbarui template pemberitahuan untuk
112    lebih menekankan citra pahlawan dan avatar. Pengembang akan dapat
113   memanfaatkan template baru dengan penyesuaian kode yang minimal.
114  </li>
115
116  <li>
117    <strong>Penyesuaian gaya pesan</strong>: Anda bisa menyesuaikan lebih banyak
118    label antarmuka pengguna yang berkaitan dengan pemberitahuan Anda menggunakan kelas
119    <code>MessageStyle</code>. Anda bisa mengonfigurasi pesan, judul percakapan,
120    dan tampilan materi.
121  </li>
122
123  <li>
124    <strong>Bundel pemberitahuan</strong>: Sistem bisa mengelompokkan pesan,
125    misalnya menurut topik pesan, dan menampilkan kelompok pesan tersebut. Seorang pengguna bisa
126   bertindak, misalnya Tutup atau Arsipkan, atas pesan yang ditampilkan. Jika Anda sudah
127    mengimplementasikan pemberitahuan untuk Android Wear, Anda akan terbiasa dengan
128    model ini.
129  </li>
130
131  <li>
132    <strong>Balasan Langsung</strong>: Untuk aplikasi komunikasi real-time, sistem
133    Android mendukung balasan inline sehingga pengguna bisa dengan cepat membalas
134    SMS atau pesan teks secara langsung dari dalam antarmuka pemberitahuan.
135  </li>
136
137  <li>
138    <strong>Tampilan khusus</strong>: Dua API baru memungkinkan Anda memanfaatkan dekorasi sistem,
139    misalnya header pemberitahuan dan tindakan, saat menggunakan tampilan
140    khusus dalam pemberitahuan.
141  </li>
142</ul>
143
144<div class="col-4of12">
145  <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
146</div>
147
148<div class="col-4of12">
149  <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
150</div>
151
152<div class="col-4of12">
153  <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
154</div>
155
156
157<p class="img-caption">
158  <strong>Gambar 2.</strong> Bundel pemberitahuan dan balasan langsung.
159</p>
160
161<p>Untuk mengetahui cara mengimplementasikan fitur-fitur
162  baru ini, lihat panduan <a href="{@docRoot}preview/features/notification-updates.html">Pemberitahuan</a>.
163</p>
164
165
166
167<h2 id="jit_aot">Kompilasi JIT/AOT yang dipandu profil</h2>
168
169<p>Di Android N, kami telah menambahkan compiler Just in Time (JIT) dengan pembuatan profil kode ke
170ART, yang memungkinkannya terus meningkatkan kinerja aplikasi Android saat
171dijalankan. Compiler JIT melengkapi compiler Ahead of Time (AOT) pada ART
172dan membantu memperbaiki kinerja waktu proses, menghemat ruang penyimpanan, dan mempercepat
173pembaruan aplikasi serta pembaruan sistem.</p>
174
175<p>Kompilasi yang dipandu profil memungkinkan ART mengelola kompilasi AOT/JIT untuk setiap aplikasi
176sesuai dengan penggunaan sebenarnya, serta kondisi pada perangkat. Misalnya
177,ART menyimpan profil setiap metode terbaik aplikasi dan bisa melakukan kompilasi lebih awal
178serta menyimpan sementara metode-metode tersebut di cache untuk mendapatkan kinerja terbaik. Hal ini membuat bagian lain dari aplikasi
179dibiarkan tidak dikompilasi hingga benar-benar digunakan.</p>
180
181<p>Di samping meningkatkan kinerja bagian-bagian penting aplikasi, kompilasi yang dipandu profil
182membantu mengurangi footprint RAM keseluruhan aplikasi, termasuk biner
183terkait. Fitur ini terutama penting pada perangkat dengan memori minim.</p>
184
185<p>ART mengelola kompilasi yang dipandu profil dengan cara yang meminimalkan dampak terhadap
186baterai perangkat. ART melakukan prakompilasi hanya bila perangkat sedang diam dan
187mengisi daya, sehingga menghemat waktu dan baterai dengan melakukan pekerjaan tersebut di awal.</p>
188
189<h2 id="quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</h2>
190
191<p>Salah satu manfaat paling nyata dari compiler JIT pada ART adalah kecepatan
192pemasnagan aplikasi dan pembaruan sistem. Bahkan aplikasi besar yang membutuhkan beberapa menit untuk
193dioptimalkan dan dipasang di Android 6.0 sekarang bisa dipasang hanya dalam hitungan
194detik. Pembaruan sistem juga lebih cepat, karena tidak ada lagi langkah optimalisasi. </p>
195
196<h2 id="doze_on_the_go">Istirahatkan Kapan Saja...</h2>
197
198<p>Android 6.0 memperkenalkan Istirahatkan, yaitu mode sistem yang menghemat baterai dengan menangguhkan
199aktivitas CPU dan jaringan di aplikasi bila perangkat sedang diam, misalnya saat
200diletakkan di atas meja atau dalam laci. </p>
201
202<p>Sekarang di Android N, Istirahatkan selangkah lebih maju dalam menghemat baterai kapan saja.
203Setiap kali layar mati dalam jangka waktu tertentu dan perangkat tidak terhubung ke sumber daya,
204Istirahatkan akan menerapkan subset pembatasan umum CPU dan jaringan pada aplikasi.
205Artinya pengguna bisa menghemat daya baterai meskipun perangkat dibawa di dalam
206tasnya.</p>
207
208
209<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
210<p class="img-caption">
211  <strong>Gambar 3.</strong> Istirahatkan sekarang menerapkan
212  pembatasan untuk meningkatkan daya tahan baterai bahkan saat perangkat sedang tidak diam.
213</p>
214
215
216<p>Tidak lama setelah layar dimatikan saat perangkat menggunakan daya baterai, Istirahatkan
217akan membatasi akses jaringan serta menangguhkan pekerjaan dan sinkronisasi. Selama jeda
218pemeliharaan, aplikasi diizinkan mengakses jaringan dan menjalankan semua
219pekerjaan/sinkronisasi yang ditangguhkan. Menyalakan layar atau mencolokkan perangkat akan mengeluarkan
220perangkat dari Istirahatkan.</p>
221
222<p>Bila perangkat dalam kondisi diam lagi, dengan layar mati dan menggunakan daya baterai selama
223jangka waktu tertentu, Istirahatkan akan menerapkan pembatasan CPU dan jaringan pada {@link
224android.os.PowerManager.WakeLock}, alarm {@link android.app.AlarmManager}, dan
225pemindaian GPS/Wi-Fi.</p>
226
227<p>Praktik terbaik untuk menyesuaikan aplikasi Anda dengan Istirahatkan adalah sama, baik
228perangkat sedang bergerak maupun diam, jadi jika Anda sudah memperbarui aplikasi untuk
229menjalankan Istirahatkan dengan lancar, berarti Anda sudah siap. Jika belum, mulailah <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">menyesuaikan
230aplikasi Anda dengan Istirahatkan</a> sekarang juga.</p>
231
232<h2 id="background_optimizations">Project Svelte: Optimalisasi Latar Belakang</h2>
233
234<p>Project Svelte merupakan upaya berkelanjutan untuk meminimalkan penggunaan RAM oleh sistem dan aplikasi
235di semua jenis perangkat Android dalam ekosistem. Di Android N, Project
236Svelte berfokus pada optimalisasi cara aplikasi berjalan di latar belakang. </p>
237
238<p>Proses latar belakang merupakan bagian terpenting dari sebagian besar aplikasi. Bila ditangani dengan benar, proses
239ini bisa memberikan pengalaman pengguna yang mengagumkan &mdash; segera, cepat, dan sesuai konteks.
240Bila tidak ditangani dengan benar, proses latar belakang bisa menguras RAM (dan
241baterai) yang sebenarnya tidak perlu serta memengaruhi kinerja sistem untuk aplikasi lain. </p>
242
243<p>Sejak Android 5.0, {@link android.app.job.JobScheduler} telah menjadi
244cara yang disukai untuk melakukan pekerjaan latar belakang dengan cara yang baik
245bagi pengguna. Aplikasi bisa menjadwalkan pekerjaan sekaligus memungkinkan sistem mengoptimalkan berdasarkan
246kondisi memori, daya, dan konektivitas. JobScheduler menawarkan kontrol serta
247kemudahan, dan kami ingin semua aplikasi menggunakannya. </p>
248
249<p>
250  Opsi baik lainnya adalah <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
251  <code>GCMNetworkManager</code></a>, bagian dari Google Play Services, yang
252  menawarkan penjadwalan pekerjaan serupa dengan kompatibilitas pada semua versi lawas
253  Android.
254</p>
255
256<p>Kami terus memperluas <code>JobScheduler</code> dan
257<code>GCMNetworkManager</code> untuk memenuhi lebih banyak
258kasus penggunaan Anda &mdash; misalnya, di Android N Anda sekarang bisa menjadwalkan pekerjaan
259latar belakang berdasarkan perubahan di Content Providers. Pada saat yang sama kami mulai
260menghilangkan beberapa pola lama yang bisa mengurangi kinerja sistem,
261terutama pada perangkat yang minim memori.</p>
262
263<p>Di Android N kami membuang tiga siaran implisit yang umum digunakan &mdash;
264 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
265  android.hardware.Camera#ACTION_NEW_PICTURE}, dan {@link
266  android.hardware.Camera#ACTION_NEW_VIDEO} &mdash; karena ketiganya bisa mengaktifkan
267proses latar belakang pada beberapa aplikasi sekaligus serta menguras memori dan baterai. Jika
268aplikasi Anda menerimanya, manfaatkan N Developer Preview untuk
269  beralih ke <code>JobScheduler</code> dan API terkait sebagai gantinya. </p>
270
271<p>
272  Lihat dokumentasi <a href="{@docRoot}preview/features/background-optimization.html">Optimalisasi
273  Latar Belakang</a> untuk mengetahui detailnya.
274</p>
275
276
277<h2 id="data_saver">Data Saver</h2>
278
279<div class="col-5of12" style="margin-right:1.5em;">
280<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
281
282<p class="img-caption" style="padding-right:2em;">
283  <strong>Gambar 4.</strong> Data Saver di Settings.
284</p>
285  </div>
286
287<p>Selama penggunaan perangkat seluler, biaya paket data seluler biasanya
288  melebihi harga perangkat itu sendiri. Bagi banyak pengguna, data seluler adalah sumber daya
289mahal yang ingin mereka hemat. </p>
290
291<p>Android N memperkenalkan mode Data Saver, layanan sistem baru yang mengurangi
292penggunaan data seluler oleh aplikasi, baik saat roaming, mendekati akhir siklus tagihan,
293atau saat menggunakan paket data prabayar yang kecil. Data Saver memberi pengguna kemampuan mengontrol cara aplikasi
294menggunakan data seluler dan memungkinkan pengembang memberikan layanan yang lebih efisien bila Data
295Saver aktif. </p>
296
297<p>Bila pengguna mengaktifkan Data Saver di <strong>Settings</strong> dan perangkat
298dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu aplikasi
299untuk menghemat penggunaan data latar depan &mdash; misalnya dengan membatasi
300kecepatan bit untuk streaming, mengurangi kualitas gambar, menangguhkan precaching optimistik,
301dan seterusnya. Pengguna bisa memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota
302bila Data Saver diaktifkan.</p>
303
304<p>Android N memperluas {@link android.net.ConnectivityManager} untuk menyediakan cara pada aplikasi
305untuk <a href="{@docRoot}preview/features/data-saver.html#status">mengambil
306preferensi Data Saver pengguna</a> dan <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">memantau
307perubahan preferensi</a>. Semua aplikasi harus memeriksa apakah pengguna telah mengaktifkan Data
308Saver dan berusaha membatasi penggunaan data latar belakang dan latar depan.</p>
309
310
311<h2 id="vulkan">Vulkan API</h2>
312
313<p>
314  Android N mengintegrasikan <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, sebuah API rendering 3D baru, ke dalam platform. Seperti
315  <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
316  ES</a>, Vulkan merupakan standar terbuka untuk grafik 3D dan rendering yang dikelola
317  oleh Khronos Group.
318</p>
319
320<p>
321  Vulkan didesain dari nol untuk meminimalkan overhead CPU dalam driver,
322  dan memungkinkan aplikasi Anda mengontrol operasi GPU lebih langsung. Vulkan
323  juga memungkinkan paralelisasi yang lebih baik dengan mengizinkan beberapa thread menjalankan
324  pekerjaan seperti pembuatan buffer perintah sekaligus.
325</p>
326
327<p>
328  Pustaka dan alat pengembangan Vulkan telah dimasukkan ke dalam Android NDK. Ini
329  berisi:
330</p>
331
332<ul>
333  <li>Header
334  </li>
335
336  <li>Layer validasi (pustaka debug)
337  </li>
338
339  <li>SPIR-V shader compiler
340  </li>
341
342  <li>Pustaka kompilasi shader waktu proses SPIR-V
343  </li>
344</ul>
345
346<p>
347  Vulkan hanya tersedia untuk aplikasi pada perangkat dengan perangkat keras yang mendukung Vulkan,
348  seperti Nexus 5X, Nexus 6P, dan Nexus Player. Kami bekerja sama erat dengan mitra
349  agar secepatnya makin banyak perangkat yang dilengkapi Vulkan.
350</p>
351
352<p>
353  Untuk informasi selengkapnya, lihat <a href="{@docRoot}ndk/guides/graphics/index.html">dokumentasi API</a>.
354</p>
355
356<h2 id="tile_api">Quick Settings Tile API</h2>
357
358
359<div style="float:right;max-width:320px">
360<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
361
362<p class="img-caption" style="padding-left:2em;">
363  <strong>Gambar 5.</strong> Quick Settings Tile dalam bayangan pemberitahuan.
364</p>
365
366
367  </div><p>Quick Settings adalah cara populer dan mudah untuk mengekspos setelan dan tindakan utama,
368langsung dari bayangan pemberitahuan. Di Android N, kami telah memperluas lingkup
369Quick Settings untuk membuatnya lebih berguna dan praktis lagi. </p>
370
371<p>Kami telah menambahkan ruang lebih banyak untuk petak Quick Settings tambahan, yang bisa
372diakses pengguna di semua bagian area tampilan halaman bernomor dengan mengusap ke kiri atau kanan. Kami juga memberi pengguna
373kontrol untuk mengatur letak dan petak Quick Settings apa yang akan
374ditampilkan &mdash; pengguna bisa menambahkan atau memindahkan petak dengan menyeret dan melepasnya. </p>
375
376<p>Bagi pengembang, Android N juga menambahkan API baru yang memungkinkan Anda mendefinisikan
377  petak Quick Settings untuk memberi akses mudah kepada pengguna ke berbagai kontrol dan tindakan utama dalam aplikasi Anda.</p>
378
379<p>
380  Petak Quick Settings dicadangkan untuk kontrol atau tindakan yang
381  mendesak atau sering digunakan, dan tidak boleh digunakan sebagai pintasan untuk
382 membuka aplikasi.
383</p>
384
385<p>
386  Setelah mendefinisikan petak, Anda bisa menyediakannya kepada pengguna, yang bisa mereka tambahkan
387  ke Quick Settings cukup dengan seret dan lepas.
388</p>
389
390<p>
391  Untuk informasi tentang pembuatan petak aplikasi, lihat dokumentasi untuk
392  <code>android.service.quicksettings.Tile</code> dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
393</p>
394
395
396
397<h2 id="number-blocking">Pemblokiran Nomor</h2>
398
399<p>Android N sekarang mendukung pemblokiran nomor di platform dan menyediakan
400API kerangka kerja agar penyedia layanan bisa mengelola daftar nomor blokir. Aplikasi SMS
401default, aplikasi telepon default, dan aplikasi operator bisa membaca dari dan
402menulis ke daftar nomor blokir. Daftar ini tidak dapat diakses oleh aplikasi lain.</p>
403
404<p>Dengan membuat pemblokiran nomor sebagai fitur standar pada platformnya, Android menyediakan
405cara konsisten bagi aplikasi untuk mendukung pemblokiran nomor di berbagai
406perangkat. Manfaat lain yang bisa diperoleh aplikasi antara lain:</p>
407
408<ul>
409  <li> Nomor yang diblokir untuk panggilan juga akan diblokir untuk SMS
410  <li> Nomor yang diblokir tetap disimpan saat pengaturan ulang dan pada berbagai perangkat melalui fitur Backup &amp;
411Restore.
412  <li> Beberapa aplikasi sekaligus bisa menggunakan daftar nomor blokir yang sama.
413</ul>
414
415<p>Selain itu, dengan integrasi aplikasi operator melalui Android berarti operator bisa
416membaca daftar nomor blokir pada perangkat dan melakukan pemblokiran di sisi layanan
417bagi pengguna tersebut untuk menghentikan panggilan dan SMS yang tidak diinginkan
418agar tidak sampai ke pengguna lewat media apa pun, misalnya VOIP-endpoint atau meneruskan panggilan telepon.</p>
419
420<p>
421  Untuk informasi selengkapnya, lihat <code>android.provider.BlockedNumberContract</code>
422  dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
423  API</a> yang bisa diunduh.
424</p>
425
426<h2 id="call_screening">Penyaringan Panggilan</h2>
427
428<p>
429  Android N memungkinkan aplikasi telepon default untuk menyaring panggilan masuk. Aplikasi
430  telepon melakukannya dengan mengimplementasikan <code>CallScreeningService</code> baru,
431  yang memungkinkan aplikasi telepon untuk melakukan sejumlah tindakan berdasarkan
432  {@link android.telecom.Call.Details Call.Details} panggilan masuk, misalnya:
433</p>
434
435<ul>
436  <li> Menolak panggilan masuk
437  <li> Tidak mengizinkan panggilan tersebut disimpan ke log panggilan
438  <li> Tidak menampilkan pemberitahuan untuk panggilan tersebut kepada pengguna
439</ul>
440
441<p>
442  Untuk informasi selengkapnya, lihat <code>android.telecom.CallScreeningService</code>
443  dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
444  API</a> yang bisa diunduh.
445</p>
446
447
448<h2 id="multi-locale_languages">Dukungan Multilokal, Lebih Banyak Bahasa yang Didukung</h2>
449
450
451<p>Android N kini memungkinkan pengguna memilih <strong>banyak lokal</strong> di Settings,
452untuk mendukung kasus penggunaan dwibahasa dengan lebih baik. Aplikasi bisa menggunakan
453API baru untuk mendapatkan lokal pilihan pengguna kemudian menawarkan pengalaman pengguna
454yang lebih canggih untuk pengguna multilokal &mdash; seperti menampilkan hasil telusur dalam
455banyak bahasa dan tidak menawarkan untuk menerjemahkan halaman web dalam bahasa
456yang sudah diketahui pengguna.</p>
457
458<p>Bersama dukungan multilokal, Android N juga memperluas ragam bahasa
459yang tersedia untuk pengguna. Masing-masing ditawarkan lebih dari 25 varian untuk bahasa yang umum
460digunakan seperti Inggris, Spanyol, Prancis, dan Arab. Juga ditambahkan dukungan
461parsial untuk lebih dari 100 bahasa baru.</p>
462
463<p>Aplikasi bisa mendapatkan daftar lokal yang disetel oleh pengguna dengan memanggil
464<code>LocaleList.GetDefault()</code>.  Untuk mendukung jumlah lokal yang diperluas, Android N sedang
465 mengubah cara mengatasi masalah sumber daya. Pastikan Anda menguji dan memverifikasi bahwa aplikasi Anda
466berfungsi seperti yang diharapkan dengan logika resolusi sumber daya baru.</p>
467
468<p>Untuk mengetahui tentang perilaku resolusi sumber daya baru dan praktik terbaik yang
469harus Anda ikuti, lihat <a href="{@docRoot}preview/features/multilingual-support.html">Dukungan Multibahasa</a>.</p>
470
471
472<h2 id="emoji">Emoji Baru</h2>
473
474<p>
475  Android N memperkenalkan emoji tambahan dan fitur terkait emoji termasuk
476  emoji warna kulit dan dukungan untuk pemilih
477  variasi. Jika aplikasi Anda mendukung emoji,
478  ikuti panduan berikut untuk memanfaatkan fitur terkait emoji ini.
479</p>
480
481<ul>
482  <li>
483    <strong>Periksa apakah perangkat berisi emoji sebelum memasukannya.</strong>
484    Untuk memeriksa emoji mana yang terdapat di
485    font sistem, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
486  </li>
487  <li>
488    <strong>Periksa apakah emoji mendukung pemilih variasi.</strong>
489    Pemilih variasi memungkinkan Anda
490    menampilkan emoji tertentu berwarna atau hitam-putih.
491    Pada perangkat seluler, aplikasi akan menghadirkan emoji berwarna daripada hitam-putih. Akan tetapi,
492    jika aplikasi Anda menampilkan emoji sebaris dengan teks, maka harus menggunakan variasi hitam-putih.
493    Untuk menentukan apakah sebuah emoji memiliki variasi, gunakan pemilih variasi.
494    Untuk daftar lengkap dari karakter dengan variasinya, tinjaulah bagian
495    <em>rangkaian variasi emoji</em> pada
496    <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
497      dokumentasi Unicode mengenai variasi</a>.
498  </li>
499  <li>
500    <strong>Periksa apakah emoji mendukung warna kulit.</strong> Android N memungkinkan pengguna memodifikasi
501    warna kulit emoji yang dirender sesuai dengan preferensi mereka. Aplikasi keyboard harus menyediakan indikasi
502    visual untuk emoji yang memiliki beberapa warna kulit dan harus memungkinkan pengguna
503    memilih warna kulit yang mereka sukai. Untuk menentukan apakah emoji sistem memiliki
504    modifier warna kulit, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
505 Anda bisa menentukan emoji mana yang menggunakan warna kulit dengan membaca
506    <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
507     dokumentasi Unicode</a>.
508  </li>
509</ul>
510
511
512<h2 id="icu4">ICU4J API di Android</h2>
513
514<p>
515  Android N kini menawarkan subset <a href="http://site.icu-project.org/">ICU4J</a> API dalam kerangka kerja Android pada paket
516  <code>android.icu</code>. Migrasi mudah, dan biasanya hanya perlu
517  mengubah dari ruang nama <code>com.java.icu</code> ke
518  <code>android.icu</code>. Jika Anda sudah menggunakan bundel ICU4J dalam aplikasi,
519  maka beralih ke <code>android.icu</code> API yang disediakan dalam kerangka kerja
520  Android bisa menghasilkan penghematan besar dalam ukuran APK.
521</p>
522
523<p>
524  Untuk mengetahui selengkapnya tentang Android ICU4J API, lihat <a href="{@docRoot}preview/features/icu4j-framework.html">Dukungan ICU4J</a>.
525</p>
526
527
528
529<h2 id="gles_32">OpenGL&trade; ES 3.2 API</h2>
530
531<p>Android N menambahkan antarmuka kerangka kerja dan dukungan platform untuk OpenGL ES 3.2, termasuk:</p>
532
533<ul>
534  <li> Semua ekstensi dari <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
535Android Extension Pack</a></a> (AEP) kecuali untuk <code>EXT_texture_sRGB_decode</code>.
536  <li> Floating-point framebuffer untuk HDR dan shading yang ditangguhkan.
537  <li> Panggilan draw BaseVertex agar batching dan streaming jadi lebih baik.
538  <li> Kontrol akses buffer yang tangguh untuk mengurangi overhead WebGL.
539</ul>
540
541<p>API kerangka kerja untuk OpenGL ES 3.2 di Android N dilengkapi dengan kelas
542  <code>GLES32</code>. Saat menggunakan OpenGL ES 3.2, pastikan
543mendeklarasikan persyaratan dalam file manifes Anda, dengan tag <code>&lt;uses-feature&gt;</code> dan
544atribut <code>android:glEsVersion</code>. </p>
545
546<p>Untuk informasi tentang menggunakan OpenGL ES, termasuk cara memeriksa versi
547OpenGL ES yang didukung perangkat saat waktu proses, lihat <a href="{@docRoot}guide/topics/graphics/opengl.html">Panduan OpenGL ES API</a>.</p>
548
549
550<h2 id="android_tv_recording">Perekaman Android TV</h2>
551
552<p>Android N menambahkan kemampuan untuk merekam dan memutar kembali materi dari layanan masukan
553Android TV melalui API perekaman baru.  Karena dibangun dengan API perekaman yang sudah
554ada, layanan masukan TV bisa mengontrol data saluran apa yang bisa direkam, cara menyimpan
555sesi rekaman, dan mengelola interaksi pengguna dengan materi rekaman. </p>
556
557<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/tv-recording-api.html">API Perekaman Android TV</a>.</p>
558
559
560<h2 id="android_for_work">Android for Work</h2>
561
562<p>Android for Work menambahkan berbagai fitur dan API baru untuk perangkat yang menjalankan Android N.
563Beberapa fitur unggulannya ada di bawah ini &mdash; untuk mengetahui daftar lengkap perubahannya, lihat
564<a href="{@docRoot}preview/features/afw.html">Pembaruan Android for Work</a>.</p>
565
566<h3 id="work_profile_security_challenge">Pertanyaan Keamanan Profil Kerja </h3>
567
568<p>
569  Pemilik profil yang menargetkan N SDK
570  bisa menetapkan pertanyaan keamanan terpisah untuk aplikasi yang berjalan di
571  profil kerja. Pertanyaan kerja ditampilkan bila pengguna mencoba membuka
572  aplikasi kerja apa pun. Jawaban pertanyaan keamanan yang benar akan membuka
573  profil kerja dan mendekripsinya jika diperlukan. Untuk pemilik profil,
574  <code>ACTION_SET_NEW_PASSWORD</code> akan meminta pengguna untuk menetapkan pertanyaan
575  kerja, dan <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> meminta
576  pengguna menyetel kunci perangkat.
577</p>
578
579<p>
580  Pemilik profil bisa menyetel kebijakan kode sandi untuk pertanyaan kerja
581  (seperti berapa lama seharusnya PIN, atau apakah sidik jari bisa digunakan
582  untuk membuka kunci profil) menggunakan <code>setPasswordQuality()</code>,
583  <code>setPasswordMinimumLength()</code> dan metode terkait. Pemilik profil
584  juga bisa menyetel kunci perangkat, menggunakan instance <code>DevicePolicyManager</code>
585  yang dikembalikan oleh metode <code>getParentProfileInstance()</code>  baru.
586  Selain itu, pemilik profil bisa menyesuaikan layar kredensial untuk
587 pertanyaan kerja menggunakan metode baru <code>setOrganizationColor()</code> dan
588  <code>setOrganizationName()</code>.
589</p>
590<h3 id="turn_off_work">Menonaktifkan pekerjaan </h3>
591
592<p>Pada perangkat dengan profil kerja, pengguna bisa beralih mode kerja. Bila mode
593kerja dinonaktifkan, profil yang dikelola akan dinonaktifkan untuk sementara, yang akan menonaktifkan aplikasi
594profil kerja, sinkronisasi latar belakang, dan pemberitahuan. Termasuk aplikasi pemilik
595profil. Bila profil kerja dinonaktifkan, sistem akan menampilkan ikon status
596tetap untuk mengingatkan pengguna bahwa mereka tidak bisa meluncurkan aplikasi kerja. Peluncur
597menunjukkan bahwa aplikasi kerja dan widget tidak bisa diakses. </p>
598
599<h3 id="always_on_vpn">Always-On VPN </h3>
600
601<p>Pemilik perangkat dan pemilik profil bisa memastikan bahwa aplikasi kerja selalu menghubungkan
602melalui VPN yang ditetapkan. Sistem secara otomatis akan memulai VPN itu setelah booting
603perangkat.</p>
604
605<p>
606  Metode <code>DevicePolicyManager</code> baru adalah
607  <code>setAlwaysOnVpnPackage()</code> dan
608  <code>getAlwaysOnVpnPackage()</code>.
609</p>
610
611<p>Karena layanan VPN bisa diikat langsung oleh sistem tanpa interaksi
612aplikasi, klien VPN perlu menangani titik masuk baru untuk Always-On VPN. Seperti
613sebelumnya, layanan ditunjukkan ke sistem melalui
614tindakan pencocokan filter intent <code>android.net.VpnService</code>. </p>
615
616<p>
617  Pengguna bisa secara manual menyetel klien Always-On VPN yang mengimplementasikan
618  metode <code>VPNService</code> dalam pengguna utama dengan menggunakan
619  <strong>Settings&gt;More&gt;Vpn</strong>.
620</p>
621
622<h3 id="custom_provisioning">Penyediaan yang disesuaikan</h3>
623
624<p>
625  Aplikasi bisa menyesuaikan alur penyediaan pemilik profil dan pemilik perangkat
626  dengan warna dan logo perusahaan.
627  <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> menyesuaikan
628  warna alur. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
629  menyesuaikan alur dengan logo perusahaan.
630</p>
631
632<h2 id="accessibility_enhancements">Penyempurnaan Aksesibilitas</h2>
633
634<p>Android N saat ini menawarkan Vision Settings langsung di layar Sambutan untuk
635persiapan perangkat baru. Ini sangat memudahkan pengguna untuk menemukan dan mengonfigurasi
636fitur aksesibilitas pada perangkat mereka, termasuk isyarat perbesaran, ukuran
637font, ukuran layar, dan TalkBack. </p>
638
639<p>Dengan fitur aksesibilitas yang penempatannya semakin jelas, pengguna Anda
640kemungkinan besar akan mencoba aplikasi dengan fitur-fitur yang diaktifkan itu. Pastikan Anda menguji aplikasi
641lebih dini dengan mengaktifkan dahulu setelan ini. Anda bisa mengaktifkannya dari Settings &gt;
642Accessibility.</p>
643
644<p>Di Android N, layanan aksesibilitas sekarang bisa membantu pengguna yang mengalami gangguan
645motorik untuk menyentuh layar. API baru memungkinkan membangun layanan dengan
646fitur-fitur seperti pelacakan wajah, pelacakan mata, pemindaian titik, dan seterusnya, untuk
647memenuhi kebutuhan para pengguna tersebut.</p>
648
649<p>Untuk informasi selengkapnya, lihat <code>android.accessibilityservice.GestureDescription</code>
650 dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi  API</a> yang bisa diunduh.</p>
651
652
653<h2 id="direct_boot">Direct Boot</h2>
654
655<p>Direct Boot memperbaiki waktu startup perangkat dan memungkinkan aplikasi
656yang telah didaftarkan memiliki fungsionalitas terbatas bahkan setelah boot ulang tak terduga.
657Misalnya, jika perangkat yang dienkripsi melakukan boot ulang selagi pengguna tidur,
658alarm terdaftar, pesan dan panggilan masuk sekarang bisa terus memberi tahu
659pengguna seperti biasa. Ini juga berarti layanan aksesibilitas bisa
660  segera tersedia setelah restart.</p>
661
662<p>Direct Boot memanfaatkan enkripsi berbasis file di Android N
663untuk mengaktifkan kebijakan enkripsi yang telah disesuaikan bagi sistem dan data aplikasi.
664Sistem akan menggunakan penyimpanan yang dienkripsi dengan perangkat untuk data sistem terpilih dan data
665aplikasi yang terdaftar secara eksplisit. Secara default, penyimpanan yang dienkripsi dengan kredensial digunakan untuk semua
666  data sistem lainnya, data pengguna, aplikasi, dan data aplikasi. </p>
667
668<p>Saat booting, sistem dimulai dalam mode terbatas dengan akses
669ke data yang dienkripsi dengan perangkat saja, dan tanpa akses umum ke aplikasi atau data.
670Jika Anda memiliki komponen yang ingin Anda jalankan dalam mode ini, Anda bisa mendaftarkannya
671dengan menyetel flag dalam manifes. Setelah restart, sistem akan mengaktifkan
672komponen terdaftar dengan menyiarkan intent <code>LOCKED_BOOT_COMPLETED</code>.
673 Sistem akan memastikan data aplikasi yang dienkripsi dengan perangkat tersedia
674sebelum membuka kunci. Semua data lainnya tidak tersedia sebelum Pengguna mengonfirmasi
675  kredensial layar kunci mereka untuk mendekripsinya. </p>
676
677Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
678</p>
679
680
681<h2 id="key_attestation">Key Attestation</h2>
682
683<p>Keystore yang didukung perangkat keras menyediakan metode yang jauh lebih aman untuk membuat, menyimpan,
684dan menggunakan kunci kriptografi pada perangkat Android. Keystore itu melindungi kunci dari
685kernel Linux, potensi kerentanan Android, dan ekstraksi
686dari perangkat yang di-root.</p>
687
688<p>Agar lebih mudah dan lebih aman dalam menggunakan keystore yang didukung perangkat keras,
689Android N memperkenalkan Key Attestation. Aplikasi dan perangkat-nonaktif bisa menggunakan Key
690Attestation untuk menentukan apakah penyandingan kunci RSA atau EC
691didukung perangkat keras, apa properti dari penyandingan kunci, dan batasan
692  apa yang diterapkan terhadap penggunaan dan validitasnya. </p>
693
694<p>Aplikasi dan layanan perangkat-nonaktif bisa meminta informasi tentang penyandingan kunci
695melalui sertifikat pengesahan X.509 yang harus ditandatangani dengan kunci
696pengesahan yang valid. Kunci pengesahan adalah kunci penandatanganan ECDSA yang
697telah diinjeksikan ke dalam keystore yang didukung perangkat keras pada perangkat saat di pabriknya.
698Karena itu, sertifikat pengesahan yang ditandatangani oleh kunci pengesahan yang
699valid akan mengonfirmasi keberadaan keystore yang didukung perangkat keras, bersama
700  detail pasangan kunci dalam keystore itu.</p>
701
702<p>Untuk memastikan perangkat ini menggunakan citra Android resmi yang
703aman dari pabrik, Key Attestation mengharuskan <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> perangkat
704menyediakan informasi berikut pada <a class="external-link" href="https://source.android.com/security/trusty/index.html">Trusted
705Execution Environment (TEE)</a>:</p>
706
707<ul>
708<li>Versi OS dan level patch yang dipasang pada perangkat</li>
709<li>Kunci publik <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> dan status kunci</li>
710  </ul>
711
712<p>Untuk informasi selengkapnya tentang fitur keystore yang didukung perangkat keras,
713lihat panduan untuk <a href="https://source.android.com/security/keystore/" class="external-link">Keystore yang Didukung Perangkat Keras</a>.</p>
714
715<p>Selain Key Attestation, Android N juga memperkenalkan
716  kunci yang terikat sidik jari yang tidak dipanggil saat pendaftaran sidik jari.</p>
717
718<h2 id="network_security_config">Network Security Config</h2>
719
720<p>Di Android N, aplikasi bisa menyesuaikan perilaku koneksi aman mereka
721(HTTPS, TLS) secara aman, tanpa modifikasi kode, dengan menggunakan
722<em>Network Security Config</em> deklaratif sebagai ganti menggunakan API programatik
723konvensional yang rawan kesalahan (mis. X509TrustManager).</p>
724
725  <p>Fitur yang didukung:</p>
726<ul>
727<li><b>Trust-anchor khusus.</b> Memungkinkan aplikasi menyesuaikan
728Certificate Authorities (CA) mana yang dipercaya untuk koneksi amannya. Misalnya,
729mempercayai sertifikat tertentu yang ditandatangani sendiri atau set CA publik yang dibatasi.
730</li>
731<li><b>Penggantian hanya-debug.</b> Memungkinkan pengembang aplikasi dengan aman men-debug
732koneksi aman aplikasi mereka tanpa menambah risiko pada basis yang sudah
733dipasang.
734</li>
735<li><b>Berhenti dari lalu lintas cleartext.</b> Memungkinkan aplikasi melindungi dirinya sendiri dari
736penggunaan lalu lintas cleartext yang tidak disengaja.</li>
737<li><b>Penyematan sertifikat.</b> Sebuah fitur canggih yang memungkinkan aplikasi
738  membatasi kunci server mana yang dipercaya untuk koneksi aman.</li>
739</ul>
740
741<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/security-config.html">Network Security
742Config</a>.</p>
743
744<h2 id="default_trusted_ca">Certificate Authority Tepercaya Default</h2>
745
746<p>Secara default, aplikasi yang menargetkan Android N hanya mempercayai sertifikat yang disediakan sistem
747dan tidak lagi mempercayai Certificate Authorities (CA) yang ditambahkan pengguna. Aplikasi yang menargetkan Android
748N dan ingin mempercayai CA yang ditambahkan pengguna harus menggunakan
749<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> untuk
750menetapkan cara mempercayai CA pengguna.</p>
751
752<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
753
754<p>
755  Android N memperkenalkan APK Signature Scheme v2, sebuah skema penandatanganan aplikasi baru yang
756  menawarkan waktu pasang aplikasi lebih cepat dan lebih banyak perlindungan terhadap perubahan
757 tidak sah pada file APK. Secara default, Android Studio 2.2 dan Android
758  Plugin untuk Gradle 2.2 menandatangani aplikasi Anda menggunakan APK Signature Scheme v2 dan
759  skema penandatanganan tradisional, yang menggunakan penandatanganan JAR.
760</p>
761
762<p>
763  Meskipun kami menyarankan untuk menerapkan APK Signature Scheme v2 pada aplikasi Anda, skema
764  baru ini tidak wajib. Jika aplikasi Anda tidak dibangun dengan benar saat menggunakan APK
765  Signature Scheme v2, Anda bisa menonaktifkan skema baru ini. Proses penonaktifan
766  menyebabkan Android Studio 2.2 dan Android Plugin untuk Gradle 2.2 menandatangani aplikasi Anda
767  menggunakan skema penandatanganan tradisional saja. Untuk menandatangani dengan
768 skema tradisional saja, buka file <code>build.gradle</code> level-modul, kemudian
769  tambahkan baris <code>v2SigningEnabled false</code> ke konfigurasi
770  penandatanganan rilis Anda:
771</p>
772
773<pre>
774  android {
775    ...
776    defaultConfig { ... }
777    signingConfigs {
778      release {
779        storeFile file("myreleasekey.keystore")
780        storePassword "password"
781        keyAlias "MyReleaseKey"
782        keyPassword "password"
783        <strong>v2SigningEnabled false</strong>
784      }
785    }
786  }
787</pre>
788
789<p class="caution"><strong>Perhatian: </strong> Jika Anda menandatangani aplikasi menggunakan APK
790  Signature Scheme v2 dan membuat perubahan lebih jauh pada aplikasi, tanda tangan aplikasi
791  menjadi tidak valid. Untuk alasan ini, gunakan alat seperti <code>zipalign</code>
792  sebelum menandatangani aplikasi Anda menggunakan APK Signature Scheme v2, bukan setelahnya.
793</p>
794
795<p>
796  Untuk informasi selengkapnya, baca dokumen Android Studio yang menjelaskan cara
797  <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
798  menandatangani aplikasi</a> di Android Studio dan cara<a href="{@docRoot}studio/build/build-variants.html#signing"> mengonfigurasi
799  file build untuk menandatangani aplikasi</a> menggunakan Android Plugin untuk Gradle.
800</p>
801
802<h2 id="scoped_directory_access">Scoped Directory Access</h2>
803
804<p>Di Android N, aplikasi bisa menggunakan API baru untuk meminta akses ke direktori <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">penyimpanan
805eksternal</a> tertentu, termasuk direktori di media lepas-pasang seperti kartu
806SD. API baru ini sangat menyederhanakan cara aplikasi Anda mengakses direktori
807penyimpanan eksternal standar, seperti direktori <code>Pictures</code>. Aplikasi
808seperti aplikasi foto bisa menggunakan API ini sebagai ganti menggunakan
809<code>READ_EXTERNAL_STORAGE</code>, yang memberikan akses ke semua direktori
810penyimpanan, atau Storage Access Framework, yang membuat pengguna mengarah ke
811direktori tersebut.</p>
812
813<p>Selain itu, API baru ini menyederhanakan langkah-langkah yang diambil pengguna untuk memberikan akses
814penyimpanan eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem akan menggunakan UI izin
815sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta
816oleh aplikasi.</p>
817
818<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang
819<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
820Directory Access</a>.</p>
821
822<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
823
824<p>
825Di Android N, pengguna bisa menekan "Alt + /" untuk memunculkan layar <em>Keyboard Shortcuts</em>
826yang menampilkan semua pintasan yang tersedia baik dari sistem maupun dari
827aplikasi yang sedang mendapatkan fokus. Ini diambil secara otomatis dari menu aplikasi
828jika tersedia, namun pengembang bisa menyediakan daftar pintasan yang telah disesuaikan
829untuk layar. Anda bisa melakukannya dengan mengganti metode
830<code>Activity.onProvideKeyboardShortcuts()</code> baru, yang dijelaskan dalam
831<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
832</p>
833
834<p>
835Untuk memunculkan Keyboard Shortcuts Helper dari mana saja di aplikasi Anda,
836panggil {@code Activity.requestKeyboardShortcutsHelper()} untuk aktivitas terkait.
837</p>
838
839<h2 id="sustained_performance_api">Sustained Performance API</h2>
840
841<p>
842Kinerja bisa berfluktuasi secara dramatis untuk aplikasi yang berjalan lama, karena
843sistem melakukan throttle pada mesin sistem-di-chip saat komponen perangkat mencapai
844batas suhunya. Fluktuasi ini memberikan target bergerak bagi pengembang
845aplikasi yang sedang membuat aplikasi berkinerja tinggi dan berjalan lama.
846</p>
847
848<p>
849Untuk menangani batasan ini, Android N menyertakan dukungan untuk
850<em>mode kinerja kontinu</em>, yang memungkinkan OEM memberikan petunjuk mengenai kemampuan kinerja
851perangkat untuk aplikasi yang berjalan lama. Pengembang aplikasi
852bisa menggunakan petunjuk ini untuk menyesuaikan aplikasi agar kinerja perangkat bisa diprediksi
853dan pada level yang konsisten dalam jangka waktu lama.
854</p>
855
856<p>
857Pengembang aplikasi bisa mencoba API baru ini dalam N Developer Preview pada
858perangkat Nexus 6P saja. Untuk menggunakan fitur ini,
859setel flag jendela kinerja kontinu
860yang ingin Anda jalankan dalam mode kinerja kontinu. Setel flag ini menggunakan metode
861{@code Window.setSustainedPerformanceMode()}. Sistem secara otomatis
862akan menonaktifkan mode ini bila jendela tidak lagi mendapatkan fokus.
863</p>
864
865<h2 id="vr">Dukungan VR</h2>
866
867<p>
868Android N menambahkan dukungan platform dan optimalisasi untuk VR Mode baru yang memungkinkan
869pengembang membuat pengalaman VR berkualitas tinggi di seluler bagi para pengguna. Ada banyak perbaikan
870kinerja, termasuk akses ke inti CPU yang eksklusif untuk aplikasi VR.
871Di dalam aplikasi, Anda bisa memanfaatkan pelacakan kepala yang cerdas,
872dan pemberitahuan stereo yang bekerja untuk VR. Hal terpenting adalah Android N menyediakan
873grafis dengan latensi sangat rendah. Untuk informasi selengkapnya tentang membangun aplikasi VR untuk Android N,
874lihat <a href="https://developers.google.com/vr/android/">Google VR SDK untuk Android</a>.
875</p>
876
877
878<h2 id="print_svc">Penyempurnaan Layanan Cetak</h2>
879
880<p>
881  Di Android N, pengembang layanan cetak kini bisa menampilkan informasi tambahan
882  tentang masing-masing printer dan pekerjaan cetak.
883</p>
884
885<p>
886  Saat mendaftarkan masing-masing printer, layanan cetak kini bisa menyetel
887  ikon per printer dalam dua cara:
888</p>
889
890<ul>
891  <li>Anda bisa menyetel ikon dari ID sumber daya dengan memanggil
892  <code>PrinterInfo.Builder.setResourceIconId()</code>
893  </li>
894
895  <li>Anda bisa menampilkan ikon dari jaringan dengan memanggil
896  <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>, dan menyetel sebuah
897 callback bila ikon diminta menggunakan
898  <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
899  </li>
900</ul>
901
902<p>
903  Selain itu, Anda bisa menyediakan aktivitas per printer untuk menampilkan informasi
904  tambahan dengan memanggil <code>PrinterInfo.Builder.setInfoIntent()</code>.
905</p>
906
907<p>
908  Anda bisa menunjukkan kemajuan dan status pekerjaan cetak di
909  pemberitahuan pekerjaan cetak dengan memanggil masing-masing
910  <code>android.printservice.PrintJob.setProgress()</code> dan
911  <code>android.printservice.PrintJob.setStatus()</code>.
912</p>
913
914<p>
915  Untuk informasi selengkapnya tentang metode ini,lihat  dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi  API</a> yang bisa diunduh.
916</p>
917
918<h2 id="framemetrics_api">FrameMetricsListener API</h2>
919
920<p>
921FrameMetricsListener API memungkinkan aplikasi untuk memantau
922kinerja rendering UI. API tersebut menyediakan kemampuan ini dengan mengekspos Pub/Sub API streaming
923untuk mentransfer info frame-timing untuk jendela aplikasi saat ini. Data yang dikembalikan
924setara dengan yang ditampilkan <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
925dumpsys gfxinfo framestats</code>, namun tidak dibatasi pada 120 bingkai.
926</p>
927
928<p>
929Anda bisa menggunakan FrameMetricsListener untuk mengukur kinerja UI
930level interaksi di produksi, tanpa koneksi USB. API
931ini memungkinkan pengumpulan data dengan granularitas lebih tinggi daripada
932{@code adb shell dumpsys gfxinfo}. Granularitas lebih tinggi ini dimungkinkan karena
933sistem bisa mengumpulkan data untuk interaksi tertentu di aplikasi; sistem
934tidak perlu merekam ringkasan global untuk keseluruhan kinerja
935aplikasi, atau mengosongkan status global yang ada. Anda bisa menggunakan kemampuan ini
936untuk mengumpulkan data kinerja dan menangkap regresi di kinerja UI
937untuk kasus penggunaan sungguhan di dalam aplikasi.
938</p>
939
940<p>
941Untuk memantau sebuah jendela, implementasikan metode callback <code>FrameMetricsListener.onMetricsAvailable()</code>
942dan daftarkan di jendela itu. Untuk informasi selengkapnya, lihat
943dokumentasi kelas {@code FrameMetricsListener} di
944<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
945</p>
946
947<p>
948API menyediakan objek {@code FrameMetrics}, yang berisi data timing yang
949dilaporkan subsistem rendering untuk berbagai tahap pencapaian dalam daur hidup bingkai.
950Metrik yang didukung adalah: {@code UNKNOWN_DELAY_DURATION},
951{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
952{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
953{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
954{@code TOTAL_DURATION}, dan {@code FIRST_DRAW_FRAME}.
955</p>
956
957
958<h2 id="virtual_files">File Maya</h2>
959
960<p>
961  Di versi Android sebelumnya, aplikasi Anda bisa menggunakan Storage Access
962  Framework untuk memungkinkan pengguna memilih file dari akun penyimpanan awan mereka,
963  seperti Google Drive. Akan tetapi, tidak ada cara untuk merepresentasikan file yang
964  tidak memiliki representasi bytecode langsung; setiap file diharuskan menyediakan
965  aliran masukan.
966</p>
967
968<p>
969  Android N menambahkan konsep <em>file maya</em> pada Storage Access
970  Framework. Fitur file maya memungkinkan
971  {@link android.provider.DocumentsProvider} Anda mengembalikan URI dokumen yang bisa
972  digunakan bersama intent {@link android.content.Intent#ACTION_VIEW} sekalipun
973  tidak memiliki representasi bytecode langsung. Android N juga memungkinkan Anda untuk
974  menyediakan format alternatif untuk file pengguna, maya atau dengan cara lain.
975</p>
976
977<p>
978  Untuk mendapatkan URI sebuah dokumen maya di aplikasi Anda, terlebih dahulu Anda membuat
979  {@link android.content.Intent} untuk membuka UI pemilih file. Karena aplikasi
980  tidak bisa membuka file maya secara langsung dengan menggunakan metode
981  {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()},
982   aplikasi Anda tidak akan menerima file maya jika Anda memasukkan kategori
983  {@link android.content.Intent#CATEGORY_OPENABLE}.
984</p>
985
986<p>
987  Setelah pengguna menentukan pilihan, sistem akan memanggil metode
988  {@link android.app.Activity#onActivityResult onActivityResult()}.
989  Aplikasi Anda bisa mengambil URI file maya dan mendapatkan aliran masukan, seperti yang
990  diperagakan dalam cuplikan kode di bawah.
991</p>
992
993<pre>
994  // Other Activity code ...
995
996  final static private int REQUEST_CODE = 64;
997
998  // We listen to the OnActivityResult event to respond to the user's selection.
999  &#64;Override
1000  public void onActivityResult(int requestCode, int resultCode,
1001    Intent resultData) {
1002      try {
1003        if (requestCode == REQUEST_CODE &amp;&amp;
1004            resultCode == Activity.RESULT_OK) {
1005
1006            Uri uri = null;
1007
1008            if (resultData != null) {
1009                uri = resultData.getData();
1010
1011                ContentResolver resolver = getContentResolver();
1012
1013                // Before attempting to coerce a file into a MIME type,
1014                // check to see what alternative MIME types are available to
1015                // coerce this file into.
1016                String[] streamTypes =
1017                  resolver.getStreamTypes(uri, "*/*");
1018
1019                AssetFileDescriptor descriptor =
1020                    resolver.openTypedAssetFileDescriptor(
1021                        uri,
1022                        streamTypes[0],
1023                        null);
1024
1025                // Retrieve a stream to the virtual file.
1026                InputStream inputStream = descriptor.createInputStream();
1027            }
1028        }
1029      } catch (Exception ex) {
1030        Log.e("EXCEPTION", "ERROR: ", ex);
1031      }
1032  }
1033</pre>
1034
1035<p>
1036  Untuk informasi selengkapnya tentang mengakses file pengguna, lihat
1037  <a href="{@docRoot}guide/topics/providers/document-provider.html">Panduan Storage
1038  Access Frameworks</a>.
1039</p>
1040