Skip to content

Most visited

Recently visited

navigation

API dan Fitur Android O

Android O memperkenalkan beragam fitur dan kemampuan baru bagi pengguna dan developer. Dokumen ini menyoroti hal-hal baru untuk developer.

Pastikan memeriksa Perubahan Perilaku Android O untuk mengetahui tentang bidang apa saja pada aplikasi Anda yang mungkin terpengaruh oleh perubahan platform.

Pengalaman Pengguna

Notifikasi

Di Android O, kami telah mendesain ulang notifikasi untuk memberikan cara yang lebih mudah serta konsisten untuk mengelola perilaku notifikasi dan setelan. Perubahan tersebut meliputi:

Kerangka Kerja Isiotomatis

Pembuatan akun, login, dan transaksi kartu kredit membutuhkan waktu dan rentan terhadap error. Pengguna bisa cepat putus asa dengan aplikasi yang memerlukan tipe tugas berulang ini.

Android O mempermudah pengisian formulir, seperti proses masuk dan formulir kartu kredit, dengan pengenalan Kerangka Kerja Isiotomatis. Aplikasi baru dan yang sudah ada akan bekerja dengan Kerangka Kerja Isiotomatis setelah pengguna mengaktifkan isiotomatis.

Anda bisa melakukan beberapa langkah untuk mengoptimalkan kinerja aplikasi dengan kerangka kerja. Untuk informasi selengkapnya, lihat Ringkasan Framework IsiOtomatis.

Mode Gambar-dalam-Gambar

Android O memungkinkan aktivitas diluncurkan dalam mode gambar-dalam-gambar (PIP). PIP adalah tipe khusus mode multi-jendela yang biasanya digunakan untuk pemutaran video. Mode PIP sudah tersedia untuk Android TV; Android O menjadikan fitur tersebut tersedia pada perangkat Android lainnya.

Bila dalam mode PIP, aktivitas berada dalam keadaan berhenti sementara, namun tetap harus menampilkan materi. Karena alasan inilah, Anda harus memastikan aplikasi tidak menghentikan sementara pemutaran di penangan onPause(). Sebagai gantinya, Anda harus menghentikan sementara video di onStop(), dan melanjutkan pemutaran di onStart(). Untuk informasi selengkapnya, lihat Daur Hidup Multi-Jendela.

Untuk menetapkan agar aktivitas Anda bisa menggunakan mode PIP, setel android:supportsPictureInPicture ke true dalam manifes. (Mulai Android O, Anda tidak perlu menyetel android:resizeableActivity ke true bila mendukung mode PIP, baik pada Android TV maupun perangkat Android lain, Anda hanya perlu menyetel android:resizeableActivity jika aktivitas Anda mendukung mode multi-jendela lain.)

Perubahan API

Android O memperkenalkan objek baru, PictureInPictureParams, yang Anda teruskan ke metode PIP untuk menetapkan cara perilaku aktivitas bila dalam mode PIP. Objek ini menetapkan properti seperti rasio aspek yang disukai aktivitas.

Metode PIP yang dijelaskan dalam Menambahkan Picture-in-picture sekarang bisa digunakan pada semua perangkat Android, tidak hanya Android TV. Selain itu, Android O menyediakan metode berikut untuk mendukung mode PIP:

Font yang Bisa Diunduh

Android O dan Koleksi Dukungan Android 26 memungkinkan Anda meminta font dari aplikasi penyedia sebagai ganti membundel font ke dalam APK atau membiarkan APK mendownload font. Fitur ini mengurangi ukuran APK Anda, menambah tingkat keberhasilan penginstalan aplikasi, dan memungkinkan beberapa aplikasi berbagi font yang sama.

Untuk informasi selengkapnya tentang mendownload font, lihat Font Yang Bisa Didownload.

Font Dalam XML

Android O memperkenalkan fitur baru, Font dalam XML, yang memungkinkan Anda menggunakan font sebagai sumber daya. Ini berarti, Anda tidak perlu membundel font sebagai aset. Font dikompilasi dalam file R dan secara otomatis tersedia dalam sistem sebagai sumber daya. Anda selanjutnya bisa mengakses font ini dengan bantuan tipe sumber daya baru, font.

Koleksi Dukungan 26 menyediakan dukungan penuh terhadap fitur ini pada perangkat yang menjalankan API versi 14 dan yang lebih tinggi.

Untuk informasi selengkapnya tentang menggunakan font sebagai sumber daya dan mengambil font sistem, lihat Font dalam XML.

Pengubahan Ukuran Otomatis TextView

Android O memungkinkan Anda menyetel ukuran teks agar mengembang atau mengerut secara otomatis berdasarkan ukuran TextView tersebut. Ini berarti, mengoptimalkan ukuran teks pada layar yang berbeda atau dengan konten dinamis akan jauh lebih mudah. Untuk informasi selengkapnya tentang pengubahan ukuran otomatis TextView di Android O, lihat Pengubahan Ukuran Otomatis TextView.

Ikon adaptif

Android O memperkenalkan ikon peluncur adaptif. Ikon adaptif mendukung efek visual, dan bisa menampilkan berbagai bentuk pada semua model perangkat. Untuk mempelajari cara membuat ikon adaptif, lihat panduan fitur pratinjau Ikon Adaptif.

Manajemen warna

Sekarang developer aplikasi pencitraan di Android bisa memanfaatkan perangkat baru yang memiliki kemampuan tampilan warna gamut-lebar. Untuk menampilkan gambar gamut lebar, aplikasi perlu mengaktifkan flag di manifesnya (per aktivitas) dan memuat bitmap dengan profil warna lebar tersemat (AdobeRGB, Pro Photo RGB, DCI-P3, dll.).

WebView API

Android O menyediakan sejumlah API untuk membantu Anda mengelola objek WebView yang menampilkan konten web dalam aplikasi. API ini, yang meningkatkan stabilitas dan keamanan aplikasi Anda, antara lain sebagai berikut:

Untuk mempelajari lebih lanjut tentang cara menggunakan API ini, lihat Mengelola WebView.

Penyematan pintasan dan widget

Android O memperkenalkan penyematan pintasan dan widget dalam aplikasi. Dalam aplikasi, Anda bisa membuat pintasan tersemat dan widget untuk peluncur yang didukung, tunduk pada izin pengguna.

Untuk informasi selengkapnya, lihat panduan fitur pratinjau Penyematan Pintasan dan Widget.

Rasio aspek layar maksimum

Aplikasi yang menargetkan Android 7.1 (API level 25) atau yang lebih rendah, memiliki rasio aspek layar maksimum default sebesar 1,86. Aplikasi yang menargetkan Android O atau yang lebih tinggi tidak memiliki rasio aspek maksimum default. Jika aplikasi Anda perlu menyetel rasio aspek maksimum, gunakan atribut maxAspectRatio dalam file manifes yang mendefinisikan Aktivitas Anda.

Dukungan multi-tampilan

Dimulai dengan Android O, platform ini menawarkan dukungan yang disempurnakan untuk multitampilan. Jika suatu aktivitas mendukung mode multi-jendela dan berjalan pada perangkat dengan multi-tampilan, pengguna bisa memindahkan aktivitas dari satu tampilan ke tampilan yang lain. Saat meluncurkan sebuah aktivitas, aplikasi bisa menetapkan di tampilan mana aktivitas itu harus dijalankan.

Catatan: Jika suatu aktivitas mendukung mode multi-jendela, Android O secara otomatis akan mengaktifkan dukungan multi-tampilan untuk aktivitas tersebut. Anda harus menguji aplikasi untuk memastikan itu bekerja secara memadai dalam lingkungan multi-tampilan.

Hanya satu aktivitas pada satu waktu yang bisa berada dalam keadaan dilanjutkan, bahkan jika aplikasi memiliki beberapa tampilan. Aktivitas berfokus berada dalam keadaan dilanjutkan kembali; seluruh aktivitas lain yang terlihat akan dihentikan sementara, namun tidak dihentikan. Untuk informasi selengkapnya mengenai daur hidup aktivitas bila sejumlah aktivitas terlihat, lihat Daur Hidup Multi-Jendela.

Ketika pengguna memindahkan aktivitas dari satu tampilan ke tampilan yang lain, sistem akan mengubah ukuran aktivitas dan menerbitkan perubahan waktu proses bila diperlukan. Aktivitas Anda bisa menangani perubahan konfigurasinya sendiri, atau mengizinkan sistem untuk menghapus proses yang berisi aktivitas dan menciptakannya kembali dengan dimensi yang baru. Untuk informasi selengkapnya, lihat Menangani Perubahan Konfigurasi.

ActivityOptions menyediakan dua metode baru untuk mendukung multitampilan:

setLaunchDisplayId()
Menetapkan pada tampilan mana aktivitas harus ditunjukkan pada saat diluncurkan.
getLaunchDisplayId()
Mengembalikan tampilan peluncuran aktivitas saat ini.

Shell adb diperluas untuk mendukung multitampilan. Perintah shell start sekarang bisa digunakan untuk menjalankan aktivitas, dan menetapkan tampilan target aktivitas:

adb shell start <activity_name> --display <display_id>

Margin layout gabungan dan pengisi

Android O lebih memudahkan Anda untuk menetapkan dalam situasi mana sisi yang berlawanan dari sebuah elemen View menggunakan margin atau pengisi yang sama. Secara khusus, Anda kini bisa menggunakan atribut berikut dalam file XML layout:

Catatan: Jika Anda menyesuaikan logika aplikasi untuk mendukung bahasa dan budaya yang berbeda, termasuk arah teks, ingatlah bahwa atribut ini tidak memengaruhi nilai layout_marginStart, layout_marginEnd, paddingStart, atau paddingEnd. Anda bisa menyetel nilai ini sendiri, selain atribut layout vertikal dan horizontal yang baru, untuk menciptakan perilaku layout yang bergantung pada arah teks.

Pengambilan pointer

Beberapa aplikasi, seperti game, desktop jauh, dan klien virtualisasi, sangat diuntungkan karena bisa dikontrol melalui pointer mouse. Perekaman pointer adalah fitur baru di Android O yang menyediakan kontrol dengan mengirim semua kejadian mouse ke tampilan terfokus dalam aplikasi Anda.

Mulai Android O, View di aplikasi Anda bisa meminta rekaman pointer dan mendefinisikan listener untuk memproses kejadian pointer yang terekam. Pointer mouse disembunyikan saat berada dalam mode ini. Tampilan ini bisa membuang rekaman pointer saat informasi mouse tidak dibutuhkan lagi. Sistem juga bisa merilis rekaman pointer saat tampilan kehilangan fokus, misalnya saat pengguna membuka aplikasi lain.

Untuk informasi mengenai cara menggunakan fitur ini dalam aplikasi Anda, lihat Rekaman pointer.

Kategori aplikasi

Android O memungkinkan setiap aplikasi untuk mendeklarasikan kategori yang sesuai dengannya, bila relevan. Kategori ini digunakan untuk mengelompokkan aplikasi dengan kegunaan atau fungsi yang sama saat menampilkannya kepada pengguna, seperti Penggunaan Data, Penggunaan Baterai, atau Penggunaan Storage. Anda bisa mendefinisikan kategori untuk aplikasi dengan menyetel atribut android:appCategory di tag manifes <application>.

Peluncur Android TV

Android O menyertakan pengalaman layar utama Android TV konten-sentris baru, yang tersedia pada emulator Android TV dan citra perangkat Nexus Player untuk Android O. Layar beranda baru mengatur konten video dalam bentuk baris sesuai dengan saluran, yang masing-masing diisi dengan program oleh aplikasi pada sistem. Aplikasi bisa mempublikasikan beberapa saluran, dan pengguna bisa mengonfigurasi saluran mana yang ingin mereka lihat di layar utama. Layar utama Android TV juga menyertakan baris Watch Next, yang diisi dengan program dari aplikasi, berdasarkan kebiasaan pengguna menampilkan. Aplikasi juga bisa menyediakan pratinjau video, yang akan diputar secara otomatis bila pengguna memfokus pada sebuah program. API untuk mengisi saluran dan program merupakan bagian dari API TvProvider, yang didistribusikan sebagai modul Koleksi Dukungan Android bersama Android O.

AnimatorSet

Mulai Android O, AnimatorSet API sekarang mendukung pencarian dan pemutaran secara terbalik. Pencarian memungkinkan Anda menyetel posisi animasi yang disetel ke titik waktu tertentu. Pemutaran secara terbalik berguna jika aplikasi Anda menyertakan animasi untuk tindakan yang bisa dibatalkan. Sebagai ganti mendefinisikan dua set animasi terpisah, Anda bisa memutar animasi yang sama secara terbalik.

Masukan dan navigasi

Kluster navigasi keyboard

Jika suatu aktivitas dalam aplikasi Anda menggunakan hierarki tampilan yang kompleks, seperti terlihat dalam Gambar 2, pertimbangkan untuk mengatur kelompok elemen UI ke dalam kluster guna memudahkan navigasi keyboard di antara mereka. Pengguna bisa menekan Meta+Tab, atau Search+Tab pada perangkat Chromebook, untuk menuju dari satu kluster ke kluster lain. Contoh kluster yang baik meliputi: panel samping, menu navigasi, area konten utama, dan elemen yang dapat menampung banyak elemen anak.

Contoh aktivitas yang menyertakan lima kluster navigasi yang bisa dipilih pengguna dengan menggunakan pintasan kluster navigasi keyboard. Kluster muncul dalam susunan berikut: panel atas, panel samping kiri, area konten utama, panel bawah, dan tombol aksi mengambang.
Gambar 2. Aktivitas yang berisi 5 kluster navigasi

Untuk membuat sebuah elemen View atau ViewGroup menjadi kluster, setel atribut android:keyboardNavigationCluster ke true dalam file XML layout elemen, atau teruskan true ke setKeyboardNavigationCluster() dalam logika UI aplikasi Anda.

Catatan: Kluster tidak bisa disarangkan, meskipun kluster yang tidak bersarang bisa muncul pada tingkat hierarki berbeda. Jika Anda mencoba menyarangkan kluster, framework hanya memperlakukan elemen ViewGroup teratas sebagai sebuah kluster.

Pada perangkat yang memiliki layar sentuh, Anda bisa menyetel elemen android:touchscreenBlocksFocus objek ViewGroup yang ditetapkan kluster ke true untuk mengizinkan navigasi khusus kluster masuk dan keluar kluster itu. Jika Anda menerapkan konfigurasi ini ke sebuah kluster, pengguna tidak bisa menggunakan tombol Tab atau tombol panah untuk membuka atau menutup kluster; mereka harus menekan kombinasi keyboard navigasi kluster.

Fokus default tampilan

Di Android O, Anda bisa menetapkan View yang harus menerima fokus setelah aktivitas yang dibuat (ulang) dilanjutkan dan pengguna menekan tombol navigasi keyboard, seperti tombol tab. Untuk menerapkan setelan "fokus secara default" ini, setel atribut android:focusedByDefault elemen View ke true dalam file XML layout yang berisi elemen UI, atau teruskan true ke setFocusedByDefault() dalam logika UI aplikasi Anda.

Sistem

Detektor StrictMode baru

Android O menambahkan tiga detektor StrictMode baru untuk membantu mengidentifikasi potensi bug dalam aplikasi Anda:

Data yang di-cache

Android O memberikan panduan dan perilaku yang lebih baik mengenai data yang di-cache. Setiap aplikasi sekarang diberikan kuota ruang disk untuk data yang di-cache, seperti yang dikembalikan oleh getCacheQuotaBytes(UUID).

Bila sistem perlu mengosongkan ruang disk, sistem akan mulai dengan menghapus file cache dari aplikasi yang menggunakan alokasi kuota paling banyak. Sehingga, bila Anda menjaga data yang di-cache di bawah kuota yang dialokasikan, file yang di-cache Anda adalah yang paling terakhir dibersihkan sistem saat diperlukan. Ketika sistem memutuskan file yang di-cache mana yang dihapus dalam aplikasi Anda, sistem akan mempertimbangkan file terlama terlebih dahulu (sebagaimana ditentukan oleh waktu dimodifikasi).

Ada juga dua perilaku baru yang bisa Anda aktifkan dengan basis per-direktori untuk mengontrol cara sistem mengosongkan data yang di-cache:

Yang terakhir, ketika Anda harus mengalokasikan ruang disk untuk file besar, pertimbangkan untuk menggunakan allocateBytes(FileDescriptor, long) API baru, yang akan secara otomatis menghapus file cache milik aplikasi lain (bila diperlukan) untuk memenuhi permintaan Anda. Saat memutuskan apakah perangkat memiliki cukup ruang disk untuk menyimpan data baru, panggil getAllocatableBytes(UUID) sebagai ganti menggunakan getUsableSpace(), karena yang pertama akan mempertimbangkan data yang di-cache yang bersedia dihapus sistem untuk kepentingan Anda.

Paging penyedia konten

Kami telah meng-update penyedia konten agar menyertakan dukungan untuk memuat kumpulan data besar pada satu laman sekaligus. Misalnya, aplikasi foto dengan ribuan gambar bisa melakukan kueri untuk subset data agar ditampilkan di laman. Setiap laman hasil yang dikembalikan oleh penyedia materi direpresentasikan oleh objek Kursor tunggal. Baik klien maupun penyedia harus sama-sama mengimplementasikan paging untuk memanfaatkan fitur ini.

Untuk informasi detail tentang perubahan pada penyedia konten, lihat ContentProvider dan ContentProviderClient.

Permintaan pemuatan ulang konten

Sekarang kelas ContentProvider dan ContentResolver masing-masing menyertakan metode refresh(), sehingga memudahkan klien untuk mengetahui apakah informasi yang mereka minta adalah yang terbaru.

Anda bisa menambahkan logika yang memperbarui konten khusus dengan memperluas ContentProvider. Pastikan Anda mengganti metode refresh() untuk mengembalikan true, yang memberi tahu klien penyedia bahwa Anda telah berupaya memperbarui data sendiri.

Aplikasi klien Anda bisa secara eksplisit meminta konten diperbarui dengan memanggil metode lain, yang juga disebut refresh(). Saat memanggil metode ini, teruskan URI data yang akan diperbarui.

Catatan: Karena Anda mungkin meminta data melalui jaringan, Anda harus memanggil refresh() dari sisi klien saja bila ada indikasi kuat bahwa konten tersebut kedaluwarsa. Alasan paling umum untuk melakukan tipe pembaruan konten ini adalah sebagai respons terhadap gestur geser untuk perbarui, yang secara eksplisit meminta UI saat ini untuk menampilkan konten terbaru.

Peningkatan JobScheduler

Android O menambahkan beberapa peningkatan pada JobScheduler. Peningkatan ini memudahkan aplikasi Anda mematuhi batas eksekusi latar belakang baru, karena Anda secara umum bisa menggunakan tugas terjadwal untuk mengganti layanan latar belakang atau penerima siaran implisit yang sekarang terbatas.

Update untuk JobScheduler meliputi:

Penyimpanan data khusus

Android O memungkinkan Anda untuk menyediakan penyimpanan data khusus sesuai preferensi Anda, yang bisa berguna jika aplikasi Anda menyimpan preferensi tersebut di cloud atau database lokal, atau jika preferensi tersebut khusus-perangkat. Untuk informasi selengkapnya tentang mengimplementasikan penyimpanan data, lihat Penyimpanan Data Khusus.

Perubahan tanda tangan findViewById()

Semua instance metode findViewById() sekarang menampilkan <T extends View> T sebagai ganti View. Perubahan ini memiliki implikasi berikut:

Penyempurnaan media

VolumeShaper

Terdapat kelas VolumeShaper baru. Anda bisa menggunakannya untuk melakukan transisi volume otomatis singkat seperti fade-in, fade-out, dan cross fade.

Penyempurnaan Fokus Audio

Aplikasi audio berbagi keluaran audio pada perangkat dengan meminta dan mengabaikan fokus audio. Aplikasi menangani perubahan di fokus dengan memulai atau menghentikan pemutaran, atau menurunkan volumenya. Terdapat kelas AudioFocusRequest baru. Dengan kelas ini, aplikasi memiliki kemampuan baru saat menangani perubahan dalam fokus audio: penurunan otomatis dan gain fokus tertunda.

Metrik media

Sebuah metode getMetrics() baru mengembalikan objek PersistableBundle yang berisi informasi konfigurasi dan kinerja, dinyatakan sebagai peta atribut dan nilai. Metode getMetrics() didefinisikan untuk kelas-kelas media ini:

Metrik dikumpulkan secara terpisah untuk setiap instance dan bertahan selama masa pakai instance. Jika tidak tersedia metrik, metode mengembalikan null. Metrik sebenarnya yang dikembalikan bergantung pada kelas.

MediaPlayer

Android O menambahkan sejumlah metode baru ke kelas MediaPlayer. Metode ini bisa meningkatkan penanganan pemutaran media di aplikasi Anda dengan sejumlah cara:

MediaPlayer sekarang mendukung enkripsi tingkat-sampel.

MediaRecorder

Metadata bisa digunakan untuk pemrosesan offline. Misalnya, sinyal gyro dari sensor bisa digunakan untuk menjalankan stabilisasi video.

Saat menambahkan trek metadata, format mime trek harus dimulai dengan prefiks "application/". Menulis metadata ini sama seperti menulis data video/audio, namun datanya tidak berasal dari MediaCodec. Sebagai gantinya, aplikasi meneruskan ByteBuffer dengan stempel waktu yang berkaitan dengan metode writeSampleData(). Stempel waktu harus dalam basis waktu yang sama dengan trek video dan audio.

File MP4 yang dihasilkan menggunakan TextMetaDataSampleEntry didefinisikan dalam bagian 12.3.3.2 ISOBMFF untuk memberi sinyal format mime metadata. Saat menggunakan MediaExtractor untuk mengekstrak file dengan trek metadata, format MIME metadata akan diekstrak ke dalam MediaFormat.

Kontrol pemutaran audio

Android O memungkinkan Anda membuat kueri dan meminta cara perangkat menghasilkan sound. Aspek kontrol terhadap pemutaran audio berikut ini memudahkan layanan Anda untuk menghasilkan sound hanya pada kondisi perangkat yang menguntungkan.

Tipe penggunaan audio baru untuk Asisten Google

Kelas AudioAttributes berisi tipe sound baru, USAGE_ASSISTANT, sesuai dengan jawaban yang diucapkan Asisten Google pada sebuah perangkat.

Perubahan pada pemutaran audio perangkat

Jika ingin layanan Anda mulai menghasilkan sound hanya bila konfigurasi perangkat tertentu aktif, Anda bisa menggunakan kelas AudioManager untuk mendaftarkan instance AudioManager.AudioPlaybackCallback, yang metode onPlaybackConfigChanged() nya membantu Anda mengidentifikasi rangkaian atribut audio yang aktif saat ini.

Permintaan eksplisit untuk fokus audio

Layanan Anda bisa mengirimkan permintaan yang lebih detail untuk menerima fokus audio tingkat-perangkat dengan menggunakan metode requestAudioFocus(). Teruskan sebuah objek AudioFocusRequest, yang Anda buat menggunakan AudioFocusRequest.Builder. Dalam kelas builder ini, Anda bisa menetapkan opsi berikut:

Catatan: Saat membangun instance AudioFocusRequest, jika Anda menunjukkan bahwa layanan Anda bisa menunggu untuk menghasilkan sound dengan memanggil setAcceptsDelayedFocusGain(), Anda juga harus memanggil setOnAudioFocusChangeListener() sehingga layanan Anda tahu kapan bisa mulai menghasilkan sound.

Akses file media yang ditingkatkan

Storage Access Framework (SAF) memungkinkan aplikasi mengekspos DocumentsProvider khusus, yang bisa menyediakan akses ke berbagai file dalam sumber data ke aplikasi lain. Bahkan, penyedia dokumen bisa memberikan akses ke file yang berada pada penyimpanan jaringan atau yang menggunakan protokol seperti Media Transfer Protocol (MTP).

Akan tetapi, mengakses file media besar dari sumber data jauh memunculkan beberapa tantangan:

Android O mengatasi masing-masing tantangan ini dengan memperbaiki Storage Access Framework.

Penyedia dokumen khusus

Mulai Android O, Storage Access Framework memungkinkan penyedia dokumen khusus membuat deskriptor file yang bisa dicari untuk file yang terletak di sumber data jauh. SAF bisa membuka file untuk mendapatkan deskriptor file bisa dicari native. SAF kemudian akan mengirim permintaan byte terpisah ke penyedia dokumen. Fitur ini memungkinkan penyedia dokumen untuk mengembalikan kisaran byte akurat yang telah diminta aplikasi pemutar media, sebagai ganti melakukan cache seluruh file terlebih dulu.

Untuk menggunakan fitur ini, Anda perlu memanggil metode StorageManager.openProxyFileDescriptor() yang baru. Metode openProxyFileDescriptor() menerima objek ProxyFileDescriptorCallback sebagai callback. SAF memanggil callback setiap kali aplikasi klien menjalankan operasi file pada deskriptor file yang dikembalikan dari penyedia dokumen.

Akses dokumen langsung

Mulai Android O, Anda bisa menggunakan metode getDocumentUri() untuk mendapatkan URI yang mereferensikan dokumen yang sama seperti mediaUri yang diberikan. Akan tetapi, karena URI yang dikembalikan didukung oleh DocumentsProvider, pengelola koleksi media bisa mengakses dokumen secara langsung, tanpa harus menyusuri pohon direktori cakupan. Hasilnya, pengelola media bisa melakukan operasi file pada dokumen jauh lebih cepat.

Perhatian: Metode getDocumentUri() hanya mencari file media; dan tidak memberikan izin kepada aplikasi untuk mengakses file tersebut. Untuk mempelajari lebih lanjut tentang cara memperoleh izin akses ke file media, lihat dokumentasi referensi.

Lokasi menuju dokumen

Saat menggunakan Storage Access Framework di Android O, Anda bisa menggunakan metode findDocumentPath(), yang tersedia dalam kelas DocumentsContract maupun DocumentsProvider, untuk menentukan lokasi dari akar sistem file ID dokumen yang diberikan. Metode ini mengembalikan lokasi tersebut dalam objek DocumentsContract.Path. Dalam hal suatu sistem file memiliki beberapa lokasi yang didefinisikan ke dokumen yang sama, metode ini mengembalikan lokasi yang paling sering digunakan untuk menuju dokumen dengan ID tersebut.

Fungsionalitas ini sangat berguna dalam skenario berikut:

Catatan: Jika aplikasi Anda memiliki izin hanya untuk mengakses beberapa dokumen saja di lokasi itu, maka nilai kembalian findDocumentPath() hanya meliputi folder dan dokumen yang bisa diakses oleh aplikasi Anda.

Konektivitas

Wi-Fi Aware

Android O menambahkan dukungan untuk Wi-Fi Aware, berdasarkan spesifikasi Neighbor Awareness Networking (NAN). Pada perangkat dengan perangkat keras Wi-Fi Aware yang sesuai, aplikasi dan perangkat di dekatnya bisa menemukan dan berkomunikasi melalui Wi-Fi tanpa jalur akses Internet. Kami bekerja sama dengan mitra perangkat keras untuk membawa teknologi Wi-Fi Aware ke perangkat secepatnya. Untuk informasi mengenai cara mengintegrasikan Wi-Fi Aware ke dalam aplikasi Anda, lihat Wi-Fi Aware.

Bluetooth

Android O memperkaya dukungan Bluetooth platform dengan menambahkan fitur-fitur berikut:

Penyandingan perangkat pendamping

Android O menyediakan API yang memungkinkan Anda untuk menyesuaikan dialog permintaan penyambungan saat mencoba menyambungkan perangkat pendamping melalui Bluetooth, BLE, dan Wi-Fi. Untuk informasi selengkapnya, lihat Penyandingan Perangkat Pendamping.

Untuk informasi selengkapnya tentang menggunakan Bluetooth pada Android, lihat panduan Bluetooth. Untuk perubahan Bluetooth yang khusus pada Android O, lihat bagian Bluetooth dari laman Perubahan Perilaku Android O.

Berbagi

Berbagi secara cerdas

Android O mempelajari preferensi berbagi pengguna yang dipersonalisasi dan lebih memahami setiap tipe konten yang tepat untuk dibagikan oleh aplikasi. Misalnya, jika pengguna mengambil foto tanda terima, Android O bisa menyarankan aplikasi pelacakan biaya; jika pengguna membuat selfie, aplikasi media sosial bisa menangani gambar dengan lebih baik. Android O secara otomatis mempelajari semua pola ini sesuai dengan preferensi pengguna yang dipersonalisasi.

Berbagi secara cerdas bekerja untuk beberapa tipe konten selain image, seperti audio, video, text, URL, dll.

Untuk mengaktifkan Berbagi secara cerdas, tambahkan sebuah ArrayList hingga tiga anotasi string ke intent yang berbagi konten. Anotasi ini harus menjelaskan komponen atau topik utama dalam konten. Contoh kode berikut menampilkan cara menambahkan anotasi ke intent:

ArrayList<String> annotations = new ArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

Untuk informasi detail tentang anotasi Berbagi secara cerdas, lihat EXTRA_CONTENT_ANNOTATIONS.

Pemilihan teks cerdas

Pada perangkat yang kompatibel, Android O memungkinkan aplikasi membantu pengguna berinteraksi dengan teks dengan cara yang lebih mudah dipahami. Bila pengguna menekan-lama pada sebuah kata dalam entitas—format yang dikenali seperti alamat atau nama restoran, misalnya—maka sistem akan memilih seluruh entitas. Pengguna akan melihat toolbar mengambang yang mungkin meliputi aplikasi yang bisa menangani entitas teks yang dipilih. Misalnya, jika mengenali sebuah alamat, sistem bisa mengarahkan pengguna ke aplikasi Maps.

Pemilihan entitas yang dikenali oleh sistem meliputi alamat, URL, nomor telepon, dan alamat email. Untuk informasi selengkapnya, lihat TextClassifier.

Aksesibilitas

Android O mendukung fitur aksesibilitas berikut untuk developer yang membuat layanan aksesibilitas mereka sendiri: Untuk mempelajari lebih lanjut tentang cara membuat aplikasi Anda lebih mudah diakses, lihat Aksesibilitas.

Tombol aksesibilitas

Layanan aksesibilitas Anda sekarang bisa meminta agar tombol aksesibilitas ditampilkan dalam area navigasi sistem, yang memberi pengguna cara cepat mengaktifkan fungsionalitas layanan dari mana saja di perangkat mereka. Untuk melakukannya, tambahkan flag FLAG_REQUEST_ACCESSIBILITY_BUTTON di AccessibilityServiceInfo atribut android:accessibilityFlags objek. Kemudian Anda bisa mendaftarkan callback menggunakan registerAccessibilityButtonCallback().

Catatan: Fitur ini hanya tersedia pada perangkat yang menyediakan area navigasi yang dirender perangkat lunak. Gunakan selalu isAccessibilityButtonAvailable(), dan respons perubahan berdasarkan ketersediaan tombol aksesibilitas dengan mengimplementasikan onAvailabilityChanged(). Dengan demikian, pengguna selalu bisa mengakses fungsionalitas layanan Anda, meskipun tombol aksesibilitas tidak didukung atau menjadi tidak tersedia.

Penyesuaian volume independen

Android O memperkenalkan kategori volume STREAM_ACCESSIBILITY, yang memungkinkan Anda mengontrol volume dari keluaran audio layanan aksesibilitas secara independen dari sound lain pada perangkat.

Untuk menggunakan jenis streaming baru ini guna mengontrol volume aksesibilitas, setel opsi FLAG_ENABLE_ACCESSIBILITY_VOLUME dalam layanan aksesibilitas Anda. Kemudian Anda bisa mengubah volume audio aksesibilitas perangkat menggunakan adjustStreamVolume().

Gestur sidik jari

Layanan aksesibilitas Anda juga bisa merespons mekanisme masukan alternatif, gesek terarah (atas, bawah, kiri, dan kanan) bersama sensor sidik jari perangkat. Untuk menerima callback tentang interaksi ini, lakukan urutan langkah berikut:

  1. Deklarasikan izin USE_FINGERPRINT dan kemampuan CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES.
  2. Setel flag FLAG_REQUEST_FINGERPRINT_GESTURES dalam atribut android:accessibilityFlags.
  3. Daftarkan callback menggunakan registerFingerprintGestureCallback().

Ingatlah bahwa tidak semua perangkat menyertakan sensor sidik jari. Anda bisa menggunakan metode isHardwareDetected() untuk mengidentifikasi apakah sebuah perangkat mendukung sensor. Bahkan pada perangkat yang menyertakan sensor sidik jari, layanan Anda hanya bisa menggunakan sensor ketika tidak digunakan untuk autentikasi. Untuk mengidentifikasi saat sensor tersedia, panggil metode isGestureDetectionAvailable() dan implementasikan callback onGestureDetectionAvailabilityChanged().

Penyorotan tingkat-kata

Untuk menentukan lokasi karakter yang terlihat dalam objek TextView, Anda bisa meneruskan EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY sebagai argumen pertama ke refreshWithExtraData(). Objek Bundle, yang Anda berikan sebagai argumen kedua ke refreshWithExtraData(), kemudian diperbarui agar menyertakan larik objek Rect. Setiap objek Rect merepresentasikan kotak pembatas karakter tertentu.

Jika layanan Anda menggunakan objek TextToSpeech untuk mendikte konten yang muncul di layar, Anda bisa memperoleh informasi pengaturan waktu yang lebih akurat tentang kapan mesin teks-ke-ucapan mulai mengucapkan kata-kata sintesis individual, asalkan mesin teks-ke-ucapan menyediakan informasi ini. Bila mesin menunggu untuk mulai memainkan audio bagi kisaran teks tertentu, API teks-ke-ucapan memberi tahu layanan bahwa kemampuan berbicara untuk kisaran teks akan dimulai menggunakan metode onRangeStart().

Jika Anda membuat implementasi TextToSpeechService sendiri, Anda bisa mendukung fungsionalitas baru ini dengan menggunakan metode rangeStart().

Nilai kisaran satu-sisi terstandar

Beberapa instance AccessibilityNodeInfo menggunakan sebuah instance AccessibilityNodeInfo.RangeInfo untuk menunjukkan bahwa elemen UI bisa menggunakan satu kisaran nilai. Saat membuat kisaran menggunakan RangeInfo.obtain(), atau saat mengambil nilai ekstrem dari kisaran tersebut menggunakan getMin() dan getMax(), ingatlah bahwa Android O memiliki definisi standar untuk kisaran satu sisi:

Teks petunjuk

Android O menyertakan sejumlah metode untuk berinteraksi dengan teks petunjuk objek yang bisa diedit:

Penugasan gestur kontinu

Layanan Anda kini bisa menetapkan urutan gerakan yang dimiliki oleh gestur terprogram yang sama dengan menggunakan argumen akhir, willContinue, dalam konstruktor GestureDescription.StrokeDescription.

Keamanan & Privasi

Izin

Android O memperkenalkan sejumlah izin baru berkaitan dengan telepon:

Semua izin ini tergolong berbahaya dan merupakan bagian dari grup izin PHONE.

Akses akun baru dan API penemuan

Android O memperkenalkan sejumlah peningkatan pada cara aplikasi mendapatkan akses ke akun pengguna. Pada akun yang dikelolanya, autentikator bisa menggunakan kebijakan mereka sendiri untuk memutuskan apakah menyembunyikan akun dari, atau memberitahukan akun ke, sebuah aplikasi. Sistem Android melacak aplikasi yang bisa mengakses akun tertentu.

Dalam Android versi sebelumnya, aplikasi yang ingin melacak daftar akun pengguna harus mendapatkan pembaruan semua akun, termasuk akun dengan tipe yang tidak terkait. Android O menambahkan metode addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]), yang memungkinkan aplikasi menentukan daftar tipe akun untuk perubahan akun yang harus diterima.

Perubahan API

AccountManager menyediakan enam metode baru untuk membantu autentikator mengelola aplikasi yang bisa melihat akun:

Android O memperkenalkan dua nilai Nama Paket khusus untuk menetapkan tingkat visibilitas aplikasi yang tidak disetel menggunakan metode setAccountVisibility(android.accounts.Account, java.lang.String, int). Nilai visibilitas PACKAGE_NAME_KEY_LEGACY_VISIBLE diberlakukan untuk aplikasi yang memiliki izin GET_ACCOUNTS, dan menargetkan versi Android di bawah Android O, atau yang tanda tangannya sesuai dengan autentikator yang menargetkan versi Android tertentu. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE memberikan nilai visibilitas default untuk aplikasi yang tidak disetel sebelumnya dan saat PACKAGE_NAME_KEY_LEGACY_VISIBLE tidak berlaku.

Untuk informasi selengkapnya tentang akses akun baru dan API penemuan, lihat referensi untuk AccountManager dan OnAccountsUpdateListener.

Google Safe Browsing API

Kelas WebView kini menyertakan Safe Browsing API untuk menyempurnakan keamanan penjelajahan web. Untuk informasi selengkapnya, lihat API Google Safe Browsing.

Pengujian

Pengujian instrumentasi

Android O menyediakan beberapa dukungan tambahan berikut untuk pengujian instrumentasi aplikasi Anda.

Jalankan pada proses aplikasi non-default

Sekarang Anda bisa menetapkan bahwa pengujian instrumentasi tertentu harus dijalankan pada proses di luar proses default aplikasi. Konfigurasi ini berguna jika aplikasi Anda berisi aktivitas yang berjalan dalam beberapa proses berbeda.

Untuk mendefinisikan instrumentasi proses non-default, arahkan ke file manifes Anda, kemudian ke elemen <instrumentation> yang diinginkan. Tambahkan atribut android:targetProcess, dan setel dengan salah satu nilai berikut:

Sementara mengeksekusi pengujian instrumentasi, Anda bisa memeriksa proses mana yang diujinya dengan memanggil getProcessName().

Laporkan hasil selama pengujian

Sekarang Anda bisa melaporkan hasil selagi pengujian instrumentasi sedang dieksekusi, bukan sesudahnya, dengan memanggil addResults().

Intent rekaan untuk pengujian

Agar lebih mudah dalam membuat pengujian UI yang independen dan terisolasi untuk aktivitas aplikasi Anda, Android O memperkenalkan metode onStartActivity(). Anda mengganti metode ini dalam subkelas khusus dari kelas Instrumentation.ActivityMonitor untuk menangani intent tertentu yang dipanggil oleh kelas pengujian Anda.

Bila kelas pengujian Anda memanggil intent itu, metode tersebut akan mengembalikan sebuah objek Instrumentation.ActivityResult stub sebagai ganti mengeksekusi intent itu sendiri. Dengan menggunakan logika intent rekaan ini dalam pengujian, Anda bisa berfokus pada bagaimana aktivitas Anda mempersiapkan dan menangani intent yang Anda teruskan pada aktivitas yang berbeda atau aplikasi yang benar-benar berbeda.

Waktu Proses & Fitur

Optimalisasi platform

Android O membawa waktu proses dan optimalisasi lainnya ke platform yang menghasilkan sejumlah peningkatan kinerja. Optimalisasi ini meliputi pengumpulan sampah sekaligus pemadatan, penggunaan memori yang lebih efisien, dan lokalitas kode.

Optimalisasi ini menghasilkan waktu booting yang lebih cepat, serta kinerja yang lebih baik dalam OS dan aplikasi.

Dukungan Java yang diperbarui

Android O menambahkan dukungan untuk sejumlah OpenJDK Java API tambahan:

Untuk mempelajari lebih lanjut tentang kelas dan metode di dalam paket yang baru ditambahkan ini, lihat dokumentasi referensi API.

Jika Anda ingin menggunakan fitur bahasa Java 8 dalam Android Studio, Anda harus mendownload versi pratinjau terbaru.

ICU4J Android Framework API yang diperbarui

Android O memperluas ICU4J Android Framework API—yang merupakan subset ICU4J API—bagi developer aplikasi untuk digunakan pada paket android.icu. Semua API ini menggunakan data pelokalan yang ada pada perangkat, sehingga Anda bisa mengurangi footprint APK dengan tidak mengompilasi koleksi ICU4J di APK Anda.

Tabel 1. Versi ICU, CLDR, dan Unicode yang digunakan di Android.

Level Android API Versi ICU Versi CLDR Versi Unicode
Android 7.0 (API level 24), Android 7.1 (API level 25) 56 28 8.0
Android O 58.2 30.0.3 9.0
Untuk mempelajari lebih lanjut tentang update pada ICU4J API yang didukung, baca catatan rilis.

Android enterprise

Fitur dan API enterprise baru telah diperkenalkan untuk perangkat yang menjalankan Android O. Pokok-pokoknya meliputi hal-hal berikut:

Untuk mempelajari lebih lanjut tentang hal ini serta fitur dan API enterprise Android baru, lihat Android di Enterprise.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.