API Android 6.0

Android 6.0 (M) menawarkan berbagai fitur baru untuk pengguna dan developer aplikasi. Dokumen ini memberikan pengantar API yang paling penting.

Mulai mengembangkan

Untuk mulai mem-build aplikasi bagi Android 6.0, Anda harus mendapatkan Android SDK terlebih dahulu. Kemudian, gunakan SDK Manager untuk mendownload Android 6.0 SDK Platform dan System Images.

Memperbarui target API level Anda

Untuk lebih mengoptimalkan aplikasi Anda pada perangkat yang menjalankan Android, setel targetSdkVersion ke "23", instal aplikasi Anda di citra sistem Android, uji, lalu publikasikan aplikasi yang telah diperbarui dengan perubahan ini.

Anda dapat menggunakan API Android sekaligus mendukung versi lama dengan menambahkan kondisi ke kode yang memeriksa API level sistem sebelum mengeksekusi API yang tidak didukung oleh minSdkVersion Anda. Untuk mempelajari lebih lanjut cara mempertahankan kompatibilitas mundur, baca Mendukung Versi Platform Berbeda.

Untuk informasi selengkapnya tentang cara kerja API level, baca Apa yang dimaksud dengan API Level?

Autentikasi Sidik Jari

Rilis ini menawarkan API baru untuk memungkinkan Anda mengautentikasi pengguna dengan menggunakan pemindaian sidik jari mereka di perangkat yang didukung. Gunakan API ini bersama dengan sistem Android Keystore.

Untuk mengautentikasi pengguna melalui pemindaian sidik jari, dapatkan instance class FingerprintManager yang baru dan panggil metode authenticate(). Aplikasi harus berjalan di perangkat yang kompatibel dengan sensor sidik jari. Anda harus mengimplementasikan antarmuka pengguna untuk alur autentikasi sidik jari di aplikasi, dan menggunakan ikon sidik jari standar Android di UI. Ikon sidik jari Android (c_fp_40px.png) disertakan dalam contoh Autentikasi Biometrik. Jika Anda mengembangkan beberapa aplikasi yang menggunakan autentikasi sidik jari, perhatikan bahwa setiap aplikasi harus mengautentikasi sidik jari pengguna secara independen.

Untuk menggunakan fitur ini di aplikasi Anda, pertama-tama tambahkan izin USE_FINGERPRINT dalam manifes.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
Perangkat seluler yang menampilkan fungsi autentikasi sidik jari

Untuk melihat implementasi aplikasi autentikasi sidik jari, lihat contoh Autentikasi Biometrik. Untuk demonstrasi cara menggunakan API autentikasi ini bersama Android API lainnya, lihat video Fingerprint API dan Payment API.

Jika Anda menguji fitur ini, ikuti langkah-langkah ini:

  1. Pasang Android SDK Tools Revision 24.3, jika Anda belum melakukannya.
  2. Daftarkan sidik jari baru di emulator dengan membuka Setelan > Keamanan > Sidik jari, lalu ikuti petunjuk pendaftaran.
  3. Gunakan emulator untuk mengemulasikan peristiwa sentuhan sidik jari dengan perintah berikut. Gunakan perintah yang sama untuk mengemulasikan peristiwa sentuhan sidik jari di layar kunci atau di aplikasi Anda.
    adb -e emu finger touch <finger_id>
    

    Di Windows, Anda mungkin harus menjalankan telnet 127.0.0.1 <emulator-id> diikuti dengan finger touch <finger_id>.

Konfirmasi Kredensial

Aplikasi Anda bisa mengautentikasi pengguna berdasarkan sudah berapa lama mereka membuka kunci perangkatnya sejak terakhir kali. Dengan fitur ini, pengguna tidak perlu mengingat sandi tambahan untuk aplikasi tertentu, dan Anda tidak perlu menerapkan antarmuka pengguna autentikasi Anda sendiri. Aplikasi Anda harus menggunakan fitur ini bersama implementasi kunci publik atau rahasia untuk autentikasi pengguna.

Untuk menetapkan durasi waktu tunggu agar kunci yang sama dapat digunakan kembali setelah pengguna berhasil diautentikasi, panggil metode setUserAuthenticationValidityDurationSeconds() baru saat Anda menyiapkan KeyGenerator atau KeyPairGenerator.

Hindari menampilkan dialog autentikasi ulang secara berlebihan – aplikasi Anda harus mencoba menggunakan objek kriptografis terlebih dahulu dan jika waktu tunggu berakhir, gunakan metode createConfirmDeviceCredentialIntent() untuk mengautentikasi ulang pengguna dalam aplikasi Anda.

Penautan Aplikasi

Rilis ini menyempurnakan sistem maksud Android dengan menyediakan penautan aplikasi yang lebih andal. Fitur ini memungkinkan Anda mengaitkan aplikasi dengan domain web yang dimiliki. Berdasarkan pengaitan ini, platform dapat menentukan aplikasi default yang akan digunakan untuk menangani link web tertentu dan tidak meminta pengguna memilih aplikasi. Untuk mempelajari cara mengimplementasikan fitur ini, lihat Menangani Link Aplikasi.

Auto Backup for Apps

Sistem sekarang melakukan pencadangan dan pemulihan penuh atas data aplikasi secara otomatis. Aplikasi Anda harus menargetkan Android 6.0 (API level 23) untuk mengaktifkan perilaku ini; Anda tidak perlu menambahkan kode tambahan. Jika pengguna menghapus akun Google mereka, data cadangan mereka juga akan dihapus. Untuk mempelajari cara kerja fitur ini dan cara mengonfigurasi data yang akan dicadangkan di sistem file, lihat Mengonfigurasi Pencadangan Otomatis untuk Aplikasi.

Direct Share

Bagian bawah perangkat seluler yang menampilkan fungsi Berbagi Langsung

Rilis ini melengkapi Anda dengan berbagai API agar pengguna bisa berbagi secara intuitif dan cepat. Kini Anda dapat menentukan target berbagi langsung yang meluncurkan aktivitas tertentu di aplikasi Anda. Target berbagi langsung ini diekspos kepada pengguna melalui menu Bagikan. Fitur ini memungkinkan pengguna berbagi konten ke target, seperti kontak, dalam aplikasi lain. Misalnya, target berbagi langsung dapat meluncurkan aktivitas di aplikasi jaringan sosial lain, yang memungkinkan pengguna berbagi konten langsung dengan teman atau komunitas tertentu di aplikasi tersebut.

Untuk mengaktifkan target berbagi langsung, Anda harus menentukan class yang memperluas class ChooserTargetService. Deklarasikan layanan Anda dalam manifes. Dalam deklarasi tersebut, tentukan izin BIND_CHOOSER_TARGET_SERVICE dan filter intent menggunakan tindakan SERVICE_INTERFACE.

Contoh berikut menunjukkan cara mendeklarasikan ChooserTargetService dalam manifes Anda.

<service android:name=".ChooserTargetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
    <intent-filter>
        <action android:name="android.service.chooser.ChooserTargetService" />
    </intent-filter>
</service>

Untuk setiap aktivitas yang ingin Anda ekspos ke ChooserTargetService, tambahkan elemen <meta-data> dengan nama "android.service.chooser.chooser_target_service" di manifes aplikasi Anda.

<activity android:name=".MyShareActivity”
        android:label="@string/share_activity_label">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
    </intent-filter>
<meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value=".ChooserTargetService" />
</activity>

Interaksi Suara

Rilis ini menyediakan API interaksi suara baru yang, bersama dengan Voice Actions, memungkinkan Anda membangun pengalaman percakapan suara ke dalam aplikasi. Panggil metode isVoiceInteraction() untuk menentukan apakah tindakan suara memicu aktivitas Anda. Jika demikian, aplikasi Anda dapat menggunakan class VoiceInteractor untuk meminta konfirmasi suara dari pengguna, memilih dari daftar opsi, dan lainnya.

Umumnya interaksi suara berasal dari tindakan suara pengguna. Akan tetapi, aktivitas interaksi suara juga dapat dimulai tanpa input pengguna. Misalnya, aplikasi lain yang diluncurkan melalui interaksi suara juga dapat mengirim intent untuk meluncurkan interaksi suara. Untuk menentukan apakah aktivitas Anda diluncurkan dari kueri suara pengguna atau dari aplikasi interaksi suara lain, panggil metode isVoiceInteractionRoot(). Jika aplikasi lain meluncurkan aktivitas Anda, metode ini akan menampilkan false. Kemudian, aplikasi Anda dapat meminta pengguna mengonfirmasi bahwa mereka memang menginginkan tindakan ini.

Untuk mempelajari lebih lanjut cara menerapkan voice action, lihat situs developer Voice Actions.

Assist API

Rilis ini menawarkan cara baru bagi pengguna untuk terlibat dengan aplikasi Anda melalui semacam asisten. Untuk menggunakan fitur ini, pengguna harus mengaktifkan asisten untuk menggunakan konteks saat ini. Setelah diaktifkan, pengguna dapat memanggil asisten dalam aplikasi apa pun dengan menekan lama tombol Layar Utama.

Aplikasi Anda dapat memilih untuk tidak berbagi konteks saat ini dengan asisten dengan menetapkan flag FLAG_SECURE. Selain kumpulan informasi standar yang diteruskan platform ke asisten, aplikasi Anda dapat berbagi informasi tambahan menggunakan class AssistContent baru.

Untuk menyediakan konteks tambahan kepada asisten dari aplikasi Anda, ikuti langkah-langkah ini:

  1. Mengimplementasikan antarmuka Application.OnProvideAssistDataListener.
  2. Daftarkan pemroses ini dengan menggunakan registerOnProvideAssistDataListener().
  3. Untuk memberikan informasi kontekstual khusus aktivitas, ganti callback onProvideAssistData() dan, secara opsional, callback onProvideAssistContent() baru.

Perangkat Storage yang Bisa Diadopsi

Dengan rilis ini, pengguna dapat menggunakan perangkat penyimpanan eksternal seperti kartu SD. Mengadopsi perangkat penyimpanan eksternal akan mengenkripsi dan memformat perangkat itu agar berfungsi layaknya penyimpanan internal. Fitur ini memungkinkan pengguna memindahkan aplikasi dan data pribadi aplikasi tersebut di antara perangkat penyimpanan. Saat memindahkan aplikasi, sistem mengikuti preferensi android:installLocation dalam manifes.

Jika aplikasi Anda mengakses API atau kolom berikut, ketahuilah bahwa jalur file yang dikembalikan akan berubah secara dinamis saat aplikasi dipindah antara perangkat penyimpanan eksternal dan internal. Saat membangun jalur file, Anda disarankan agar selalu memanggil API ini secara dinamis. Jangan menggunakan jalur file hasil hardcode atau mempertahankan jalur file yang sepenuhnya memenuhi syarat dan telah dibuat sebelumnya.

Untuk men-debug fitur ini, Anda dapat mengaktifkan adopsi drive USB yang terhubung ke perangkat Android melalui kabel USB On-The-Go (OTG), dengan menjalankan perintah ini:

$ adb shell sm set-force-adoptable true

Notifikasi

Rilis ini menambahkan perubahan API berikut untuk notifikasi:

Dukungan Stilus Bluetooth

Rilis ini menyediakan dukungan yang disempurnakan untuk masukan pengguna dengan menggunakan stilus Bluetooth. Pengguna dapat menyambungkan dan menghubungkan stilus Bluetooth yang kompatibel dengan ponsel atau tablet mereka. Saat terhubung, informasi posisi dari layar sentuh digabungkan dengan informasi tombol dan tekanan dari stilus untuk memberikan ekspresi yang lebih besar daripada hanya dengan layar sentuh. Aplikasi Anda dapat memproses penekanan tombol stilus dan melakukan tindakan sekunder, dengan mendaftarkan objek View.OnContextClickListener dan GestureDetector.OnContextClickListener di aktivitas Anda.

Gunakan metode dan konstanta MotionEvent untuk mendeteksi interaksi tombol stilus:

Pemindaian Bluetooth Low Energy yang Ditingkatkan

Jika aplikasi Anda menjalankan pemindaian Bluetooth Low Energy, gunakan metode setCallbackType() baru untuk menentukan bahwa Anda ingin sistem memberi tahu callback saat pertama kali menemukan, atau melihat setelah sekian lama, paket iklan yang cocok dengan ScanFilter yang ditetapkan. Pendekatan terhadap pemindaian ini lebih hemat energi daripada yang diberikan dalam versi platform sebelumnya.

Dukungan Hotspot 2.0 Release 1

Rilis ini menambahkan dukungan untuk spesifikasi Hotspot 2.0 Release 1 pada perangkat Nexus 6 dan Nexus 9. Untuk menyediakan kredensial Hotspot 2.0 di aplikasi Anda, gunakan metode baru class WifiEnterpriseConfig, seperti setPlmn() dan setRealm(). Dalam objek WifiConfiguration, Anda dapat menetapkan kolom FQDN dan providerFriendlyName. Metode isPasspointNetwork() baru akan menunjukkan apakah jaringan yang terdeteksi mewakili titik akses Hotspot 2.0.

Mode Tampilan 4K

Platform ini sekarang memungkinkan aplikasi meminta resolusi tampilan ditingkatkan ke rendering 4K pada hardware yang kompatibel. Untuk membuat kueri resolusi fisik saat ini, gunakan Display.Mode API baru. Jika UI digambar pada resolusi logis yang lebih rendah dan di-upgrade ke resolusi fisik yang lebih besar, perlu diketahui bahwa resolusi fisik yang ditampilkan metode getPhysicalWidth() mungkin berbeda dari resolusi logis yang dilaporkan oleh getSize().

Anda dapat meminta sistem untuk mengubah resolusi fisik di aplikasi saat berjalan, dengan menetapkan properti preferredDisplayModeId jendela aplikasi Anda. Fitur ini berguna jika Anda ingin beralih ke resolusi tampilan 4K. Saat dalam mode tampilan 4K, UI akan terus dirender pada resolusi asli (seperti 1080p) dan ditingkatkan kualitasnya ke 4K, tetapi objek SurfaceView mungkin menampilkan konten pada resolusi native.

ColorStateList Bertema

Atribut tema kini didukung di ColorStateList untuk perangkat yang menjalankan Android 6.0 (API level 23). Metode Resources.getColorStateList() dan Resources.getColor() tidak digunakan lagi. Jika Anda memanggil API ini, panggil metode Context.getColorStateList() atau Context.getColor() baru. Metode ini juga tersedia di library compat v4 melalui ContextCompat.

Fitur Audio

Rilis ini menambahkan penyempurnaan pada pemrosesan audio di Android, termasuk:

  • Dukungan untuk protokol MIDI, dengan android.media.midi API baru. Gunakan API ini untuk mengirim dan menerima peristiwa MIDI.
  • Class AudioRecord.Builder dan AudioTrack.Builder baru untuk membuat objek perekaman dan pemutaran audio digital masing-masing, serta mengonfigurasi properti sumber dan sink audio untuk mengganti default sistem.
  • Sangkutan API untuk mengaitkan perangkat masukan dan audio. Hal ini sangat berguna jika aplikasi Anda memungkinkan pengguna memulai penelusuran dengan suara dari pengontrol game atau kontrol jarak jauh yang terhubung ke Android TV. Sistem akan memanggil callback onSearchRequested() baru saat pengguna memulai penelusuran. Untuk menentukan apakah perangkat input pengguna memiliki mikrofon bawaan, ambil objek InputDevice dari callback tersebut, lalu panggil metode hasMicrophone() baru.
  • Metode getDevices() baru yang memungkinkan Anda mengambil daftar semua perangkat audio yang saat ini terhubung ke sistem. Anda juga dapat mendaftarkan objek AudioDeviceCallback jika ingin sistem memberi tahu aplikasi saat perangkat audio terhubung atau terputus.

Fitur Video

Rilis ini menambahkan kemampuan baru pada API pemrosesan video, termasuk:

  • Class MediaSync baru yang membantu aplikasi merender streaming audio dan video secara sinkron. Buffer audio dikirim dengan cara yang tidak memblokir dan dikembalikan melalui callback. Ini juga mendukung kecepatan pemutaran dinamis.
  • Peristiwa EVENT_SESSION_RECLAIMED baru, yang menunjukkan bahwa sesi yang dibuka oleh aplikasi telah diambil kembali oleh pengelola resource. Jika aplikasi Anda menggunakan sesi DRM, Anda harus menangani peristiwa ini dan memastikan tidak menggunakan sesi yang diambil kembali.
  • Kode error ERROR_RECLAIMED baru, yang menunjukkan bahwa pengelola resource telah mengambil kembali resource media yang digunakan oleh codec. Dengan pengecualian ini, codec harus dirilis, karena telah dipindahkan ke status terminal.
  • Antarmuka getMaxSupportedInstances() baru untuk mendapatkan petunjuk mengenai jumlah maksimum instance codec serentak yang didukung.
  • Metode setPlaybackParams() baru untuk menyetel kecepatan pemutaran media untuk pemutaran gerakan cepat atau lambat. Hal ini juga memperpanjang atau mempercepat pemutaran audio secara otomatis bersama video.

Fitur Kamera

Rilis ini menyertakan API baru berikut untuk mengakses lampu kilat kamera dan untuk pemrosesan ulang gambar oleh kamera:

Flashlight API

Jika perangkat kamera memiliki unit flash, Anda dapat memanggil metode setTorchMode() untuk mengaktifkan atau menonaktifkan mode senter unit flash tanpa membuka perangkat kamera. Aplikasi tidak memiliki kepemilikan eksklusif atas unit flash maupun perangkat kamera. Mode senter akan dinonaktifkan dan menjadi tidak tersedia setiap kali perangkat kamera menjadi tidak tersedia, atau saat resource kamera lain yang membuat senter tetap menyala menjadi tidak tersedia. Aplikasi lain juga dapat memanggil setTorchMode() untuk menonaktifkan mode flash. Saat aplikasi terakhir yang mengaktifkan mode senter ditutup, mode senter akan dinonaktifkan.

Anda dapat mendaftarkan callback agar diberi tahu tentang status mode senter dengan memanggil metode registerTorchCallback(). Pertama kali didaftarkan, callback langsung dipanggil bersama status mode senter dari semua perangkat kamera yang saat ini diketahui memiliki unit lampu kilat. Jika mode flash berhasil diaktifkan atau dinonaktifkan, metode onTorchModeChanged() akan dipanggil.

Reprocessing API

Camera2 API diperluas untuk mendukung pemrosesan ulang gambar berformat YUV dan format buram pribadi. Untuk menentukan apakah kemampuan pemrosesan ulang ini tersedia, panggil getCameraCharacteristics() dan periksa kunci REPROCESS_MAX_CAPTURE_STALL. Jika perangkat mendukung pemrosesan ulang, Anda dapat membuat sesi pengambilan gambar kamera yang dapat diproses ulang dengan memanggil createReprocessableCaptureSession(), dan membuat permintaan untuk pemrosesan ulang buffer input.

Gunakan class ImageWriter untuk menghubungkan alur buffer input ke input pemrosesan ulang kamera. Untuk mendapatkan buffer kosong, ikuti model pemrograman ini:

  1. Panggil metode dequeueInputImage().
  2. Isilah data ke dalam buffer masukan.
  3. Kirim buffer ke kamera dengan memanggil metode queueInputImage().

Jika Anda menggunakan objek ImageWriter bersama dengan gambar PRIVATE, aplikasi Anda tidak dapat mengakses data gambar secara langsung. Sebagai gantinya, teruskan gambar PRIVATE langsung ke ImageWriter dengan memanggil metode queueInputImage() tanpa salinan buffer.

Class ImageReader kini mendukung aliran gambar berformat PRIVATE. Dukungan ini memungkinkan aplikasi Anda menjaga antrean gambar melingkar dari gambar output ImageReader, memilih satu atau beberapa gambar, dan mengirimnya ke ImageWriter untuk pemrosesan ulang kamera.

Fitur Android for Work

Rilis ini menyertakan API baru berikut untuk Android for Work:

  • Kontrol yang disempurnakan untuk perangkat Corporate-Owned, Single-Use: Pemilik Perangkat kini dapat mengontrol setelan berikut untuk meningkatkan pengelolaan perangkat Corporate-Owned, Single-Use (COSU):
  • Penginstalan dan penghapusan aplikasi secara diam-diam oleh Pemilik Perangkat: Pemilik Perangkat kini dapat menginstal dan menghapus instalasi aplikasi secara diam-diam menggunakan API PackageInstaller, tanpa bergantung pada Google Play for Work. Anda kini dapat menyediakan perangkat melalui Pemilik Perangkat yang mengambil dan menginstal aplikasi tanpa interaksi pengguna. Fitur ini berguna untuk mengaktifkan provisi kios dengan satu sentuhan atau perangkat sejenis lainnya tanpa mengaktifkan akun Google.
  • Akses sertifikat perusahaan tanpa dialog: Saat aplikasi memanggil choosePrivateKeyAlias(), sebelum pengguna diminta untuk memilih sertifikat, Pemilik Profil atau Perangkat kini dapat memanggil metode onChoosePrivateKeyAlias() untuk memberikan alias secara diam-diam ke aplikasi yang meminta. Fitur ini memungkinkan Anda memberi akses ke sertifikat pada aplikasi terkelola tanpa interaksi pengguna.
  • Persetujuan otomatis terhadap update sistem. Dengan menetapkan kebijakan update sistem dengan setSystemUpdatePolicy(), Pemilik Perangkat kini dapat menyetujui update sistem secara otomatis, misalnya pada kasus perangkat kios, atau menunda update dan mencegahnya diambil oleh pengguna hingga selama 30 hari. Selain itu, administrator dapat menetapkan jangka waktu harian saat update harus dilakukan, misalnya, selama jam-jam saat perangkat kios tidak digunakan. Jika update sistem tersedia, sistem akan memeriksa apakah aplikasi pengontrol kebijakan perangkat telah menetapkan kebijakan update sistem, dan bertindak sebagaimana mestinya.
  • Penginstalan sertifikat yang didelegasikan: Pemilik Profil atau Perangkat kini dapat memberi aplikasi pihak ketiga kemampuan untuk memanggil API pengelolaan sertifikat DevicePolicyManager ini:
  • Perangkat seluler menampilkan fitur notifikasi status kerja dalam Android untuk Kerja
  • Pelacakan penggunaan data. Pemilik Profil atau Perangkat kini dapat membuat kueri untuk statistik penggunaan data yang terlihat di penggunaan Setelan > Data dengan menggunakan metode NetworkStatsManager baru. Pemilik Profil secara otomatis diberikan izin untuk melakukan kueri terhadap data dalam profil yang dikelolanya, sementara Pemilik Perangkat mendapatkan akses ke data penggunaan dari pengguna utama yang terkelola.
  • Pengelolaan izin runtime:

    Pemilik Profil atau Pemilik Perangkat dapat menetapkan kebijakan izin untuk semua permintaan runtime dari semua aplikasi menggunakan setPermissionPolicy(), untuk meminta pengguna agar memberikan izin atau secara otomatis memberikan atau menolak izin secara diam-diam. Jika kebijakan yang terakhir ditetapkan, pengguna tidak dapat memodifikasi pilihan yang dibuat oleh Pemilik Profil atau Pemilik Perangkat dalam layar izin aplikasi di Setelan.

  • VPN di Setelan: Aplikasi VPN kini terlihat di Setelan > Lainnya > VPN. Selain itu, notifikasi yang menyertai penggunaan VPN kini dikhususkan untuk cara konfigurasi VPN tersebut. Untuk Pemilik Profil, notifikasi khusus mengenai apakah VPN dikonfigurasi untuk profil terkelola, profil pribadi, atau keduanya. Untuk Pemilik Perangkat, notifikasi khusus mengenai apakah VPN dikonfigurasi untuk seluruh perangkat.
  • Notifikasi status kerja: Ikon tas kantor status bar kini muncul setiap kali aplikasi dari profil terkelola memiliki aktivitas di latar depan. Selain itu, jika kunci perangkat dibuka secara langsung ke aktivitas aplikasi di profil terkelola, toast akan ditampilkan untuk memberi tahu pengguna bahwa mereka sedang dalam profil kerja.