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 — 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 — 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 — 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 — 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 — 264 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link 265 android.hardware.Camera#ACTION_NEW_PICTURE}, dan {@link 266 android.hardware.Camera#ACTION_NEW_VIDEO} — 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 — 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 — 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 & 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 — 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™ 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><uses-feature></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 — 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>More>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 > 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 @Override 1000 public void onActivityResult(int requestCode, int resultCode, 1001 Intent resultData) { 1002 try { 1003 if (requestCode == REQUEST_CODE && 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