Fitur dan API Android 9

Android 9 (API level 28) memperkenalkan fitur dan kemampuan baru yang hebat bagi pengguna dan developer. Dokumen ini merangkum apa saja yang baru untuk developer.

Untuk mempelajari API baru, baca laporan perbedaan API atau buka referensi API Android. Pastikan juga untuk melihat Perubahan Perilaku Android 9 untuk mempelajari area mana saja pada aplikasi Anda yang dapat terpengaruh oleh perubahan platform.

Pemosisian dalam ruangan dengan Wi-Fi RTT

RTT API baru mendukung pemosisian dalam ruangan di aplikasi Anda.

Android 9 menambahkan dukungan platform untuk protokol Wi-Fi IEEE 802.11-2016—juga dikenal sebagai Wi-Fi Round-Trip-Time (RTT)—sehingga Anda dapat memanfaatkan pemosisian dalam ruangan di aplikasi Anda.

Pada perangkat yang menjalankan Android 9 dengan dukungan hardware, aplikasi Anda dapat menggunakan RTT API untuk mengukur jarak ke titik akses (AP) Wi-Fi Wi-Fi terdekat yang mendukung RTT. Perangkat harus mengaktifkan layanan lokasi dan pemindaian Wi-Fi (di bagian Setelan > Lokasi), dan aplikasi Anda harus memiliki izin ACCESS_FINE_LOCATION. Perangkat tidak perlu terhubung ke titik akses untuk menggunakan RTT. Untuk menjaga privasi, hanya ponsel yang dapat menentukan jarak ke titik akses; titik akses tidak memiliki informasi ini.

Jika perangkat Anda mengukur jarak ke 3 titik akses atau lebih, Anda dapat menggunakan algoritma multikemudian untuk memperkirakan posisi perangkat yang paling sesuai dengan pengukuran tersebut. Hasilnya biasanya akurat 1 hingga 2 meter.

Dengan akurasi ini, Anda dapat menciptakan pengalaman baru, seperti navigasi dalam bangunan dan layanan berbasis lokasi yang mendetail, seperti kontrol suara yang jelas (misalnya, "Nyalakan lampu ini") dan informasi berbasis lokasi (seperti "Apakah ada penawaran khusus untuk produk ini?").

Lihat WiFi RTT API yang digunakan di aplikasi demo Android WifiRttScan.

Untuk informasi lebih lanjut, lihat Lokasi Wi-Fi: rentang dengan RTT.

Dukungan potongan layar

Layar opsi developer menunjukkan ukuran potongan yang berbeda

Menguji potongan tampilan menggunakan emulator

Android 9 menawarkan dukungan untuk layar tepi-ke-tepi terbaru yang berisi potongan layar untuk kamera dan speaker. Class DisplayCutout memungkinkan Anda mengetahui lokasi dan bentuk area non-fungsional tempat konten tidak boleh ditampilkan. Untuk menentukan keberadaan dan penempatan area potongan ini, gunakan metode getDisplayCutout().

Atribut tata letak jendela baru, layoutInDisplayCutoutMode, memungkinkan aplikasi Anda menata kontennya di sekitar potongan perangkat. Anda dapat menetapkan atribut ini ke salah satu nilai berikut:

Anda dapat menyimulasikan potongan layar di perangkat atau emulator apa pun yang menjalankan Android 9 sebagai berikut:

  1. Aktifkan opsi developer.
  2. Di layar Developer options, scroll ke bawah ke bagian Drawing dan pilih Simulate a display with a cut.
  3. Pilih ukuran potongan.

Notifikasi

Android 9 memperkenalkan beberapa peningkatan pada notifikasi, yang semuanya tersedia untuk developer yang menargetkan API level 28 dan yang lebih baru.

Notifikasi pesan

MessagingStyle dengan foto terlampir.

Notifikasi pesan

MessagingStyle dengan balasan dan percakapan.

Untuk kode contoh yang menggunakan notifikasi, termasuk fitur Android 9, lihat Contoh Orang.

Pengalaman pesan yang ditingkatkan

Mulai dari Android 7.0 (API level 24), Anda dapat menambahkan tindakan untuk membalas pesan atau memasukkan teks lain langsung dari notifikasi. Android 9 menyempurnakan fitur ini dengan peningkatan berikut:

  • Dukungan yang disederhanakan untuk peserta percakapan: Class Person digunakan untuk mengidentifikasi orang-orang yang terlibat dalam percakapan, termasuk avatar dan URI mereka. Banyak API lain, seperti addMessage(), kini memanfaatkan class Person, bukan CharSequence. Class Person juga mendukung pola desain Builder.

  • Dukungan untuk gambar: Android 9 kini menampilkan gambar dalam Notifikasi Messaging di ponsel. Anda dapat menggunakan setData() pada pesan untuk menampilkan gambar. Cuplikan kode berikut menunjukkan cara membuat Person dan pesan yang berisi gambar.

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • Simpan balasan sebagai draf: Aplikasi Anda dapat mengambil EXTRA_REMOTE_INPUT_DRAFT yang dikirim oleh sistem saat pengguna tidak sengaja menutup notifikasi pesan. Anda dapat menggunakan tambahan ini untuk mengisi otomatis kolom teks di aplikasi sehingga pengguna dapat menyelesaikan balasan.

  • Identifikasi apakah percakapan merupakan percakapan grup: Anda dapat menggunakan setGroupConversation() untuk mengidentifikasi percakapan dengan sengaja sebagai percakapan grup atau nongrup.

  • Menetapkan tindakan semantik untuk intent: Metode setSemanticAction() memungkinkan Anda memberikan makna semantik pada suatu tindakan, seperti "tandai telah dibaca", "hapus", "balas", dan seterusnya.

  • SmartReply: Android 9 mendukung saran balasan yang sama dengan yang tersedia di aplikasi pesan Anda. Gunakan RemoteInput.setChoices() untuk memberikan array respons standar kepada pengguna.

Setelan channel, siaran, dan mode Jangan Ganggu

Android 8.0 memperkenalkan Notification Channels, yang memungkinkan Anda membuat saluran yang dapat disesuaikan pengguna untuk setiap jenis notifikasi yang ingin ditampilkan. Android 9 menyederhanakan setelan saluran notifikasi dengan perubahan ini:

  • Memblokir grup saluran: Pengguna kini dapat memblokir seluruh grup saluran dalam setelan notifikasi untuk aplikasi. Anda dapat menggunakan metode isBlocked() untuk mengidentifikasi kapan grup diblokir dan, akibatnya, tidak mengirim notifikasi apa pun untuk saluran dalam grup tersebut.

    Selain itu, aplikasi Anda dapat mengkueri setelan grup saluran saat ini menggunakan metode getNotificationChannelGroup() baru.

  • Jenis intent siaran baru: Sistem Android kini mengirimkan intent siaran saat status pemblokiran saluran notifikasi dan grup saluran berubah. Aplikasi yang memiliki saluran atau grup yang diblokir dapat memproses intent ini dan bereaksi sebagaimana mestinya. Untuk mengetahui informasi selengkapnya tentang tindakan dan tambahan intent ini, lihat daftar konstanta yang diupdate dalam referensi NotificationManager. Untuk informasi tentang cara bereaksi terhadap intent siaran, lihat Siaran.

  • NotificationManager.Policy memiliki tiga kategori prioritas Jangan Ganggu yang baru:

  • NotificationManager.Policy juga memiliki tujuh konstanta Jangan Disturb baru yang dapat Anda gunakan untuk menyembunyikan gangguan visual:

Dukungan multikamera dan update kamera

Di perangkat yang menjalankan Android 9, Anda dapat mengakses streaming secara bersamaan dari dua atau beberapa kamera fisik. Pada perangkat dengan kamera dual-depan atau dual-belakang, Anda dapat membuat fitur inovatif yang tidak mungkin dilakukan dengan hanya satu kamera saja, seperti zoom yang mulus, bokeh, dan stereo vision. API ini juga memungkinkan Anda memanggil streaming kamera logis atau gabungan yang secara otomatis beralih antara dua kamera atau lebih.

Peningkatan lain pada kamera mencakup Parameter sesi tambahan yang membantu mengurangi penundaan selama pengambilan awal, dan berbagi platform yang memungkinkan klien kamera menangani berbagai kasus penggunaan tanpa perlu berhenti dan memulai streaming kamera. Kami juga telah menambahkan API untuk dukungan flash berbasis tampilan dan akses ke stempel waktu OIS untuk efek khusus dan stabilisasi gambar tingkat aplikasi.

Di Android 9, multi-kamera API mendukung kamera monokrom untuk perangkat dengan kemampuan FULL atau LIMITED. Output monokrom dicapai melalui format YUV_420_888 dengan Y sebagai hitam putih, U (Cb) sebagai 128, dan V (Cr) sebagai 128.

Android 9 juga memungkinkan dukungan untuk kamera USB/UVC eksternal pada perangkat yang didukung.

ImageDecoder untuk drawable dan bitmap

Android 9 memperkenalkan class ImageDecoder, yang menyediakan pendekatan modern untuk mendekode gambar. Gunakan class ini, bukan BitmapFactory dan BitmapFactory.Options API.

ImageDecoder memungkinkan Anda membuat Drawable atau Bitmap dari buffering byte, file, atau URI. Untuk mendekode gambar, panggil createSource() terlebih dahulu dengan sumber gambar yang dienkode. Kemudian, panggil decodeDrawable() atau decodeBitmap() dengan meneruskan objek ImageDecoder.Source untuk membuat Drawable atau Bitmap. Untuk mengubah setelan default, teruskan OnHeaderDecodedListener ke decodeDrawable() atau decodeBitmap(). ImageDecoder memanggil onHeaderDecoded() dengan lebar dan tinggi default gambar, setelah diketahui. Jika gambar yang dienkode adalah GIF atau WebP animasi, decodeDrawable() akan menampilkan Drawable yang merupakan instance class AnimatedImageDrawable.

Ada berbagai metode yang bisa Anda gunakan untuk menyetel properti gambar:

  • Untuk menskalakan gambar yang didekode ke ukuran yang tepat, teruskan dimensi target ke setTargetSize(). Anda juga bisa menskalakan gambar menggunakan ukuran contoh. Teruskan ukuran sampel langsung ke setTargetSampleSize().
  • Untuk memangkas gambar dalam rentang gambar yang diskalakan, panggil setCrop().
  • Untuk membuat bitmap yang dapat berubah, teruskan true ke setMutableRequired().

ImageDecoder juga memungkinkan Anda menambahkan efek yang disesuaikan dan rumit pada gambar seperti sudut membulat atau mask lingkaran. Gunakan setPostProcessor() dengan instance class PostProcessor untuk menjalankan perintah gambar apa pun yang Anda inginkan.

Animasi

Android 9 memperkenalkan class AnimatedImageDrawable untuk menggambar dan menampilkan gambar animasi GIF dan WebP. AnimatedImageDrawable berfungsi mirip dengan AnimatedVectorDrawable dalam thread render yang mendorong animasi AnimatedImageDrawable. Thread render juga menggunakan thread pekerja untuk melakukan dekode, sehingga proses dekode tidak mengganggu operasi lain di thread render. Dengan implementasi ini, aplikasi Anda dapat menampilkan gambar animasi tanpa mengelola update atau mengganggu peristiwa lain di UI thread aplikasi Anda.

AnimatedImageDrawable dapat didekode menggunakan instance ImageDecoder. Cuplikan kode berikut menunjukkan cara menggunakan ImageDecoder untuk mendekode AnimatedImageDrawable Anda:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder memiliki beberapa metode yang memungkinkan Anda memodifikasi gambar lebih lanjut. Misalnya, Anda dapat menggunakan metode setPostProcessor() untuk mengubah tampilan gambar, seperti menerapkan mask lingkaran atau sudut membulat.

Video HDR VP9, kompresi gambar HEIF, dan Media API

Android 9 menyediakan dukungan bawaan untuk Rentang Dinamis Tinggi (HDR) VP9 Profile 2, sehingga Anda dapat menayangkan film berkemampuan HDR kepada pengguna Anda dari YouTube, Play Film, dan sumber lainnya di perangkat yang mendukung HDR.

Android 9 juga menambahkan dukungan untuk mengenkode gambar menggunakan format File Gambar Efisiensi Tinggi (HEIF atau HEIC), yang meningkatkan kompresi dan mengurangi ruang penyimpanan serta penggunaan data jaringan. Contoh gambar HEIF didukung di class MediaMuxer dan MediaExtractor. Dengan dukungan platform pada perangkat Android 9, Anda dapat dengan mudah mengirim dan menggunakan image HEIF dari server backend. Setelah memastikan bahwa aplikasi Anda kompatibel dengan format data ini untuk dibagikan dan ditampilkan, coba HEIF sebagai format penyimpanan gambar di aplikasi Anda. Anda dapat melakukan konversi jpeg-ke-heic menggunakan ImageDecoder atau BitmapFactory (yang memperoleh bitmap dari file JPEG). Anda kemudian dapat menggunakan HeifWriter untuk menulis gambar diam HEIF dari buffering byte YUV, atau instance Surface atau Bitmap.

Metrik media juga tersedia dari class AudioTrack, AudioRecord, dan MediaDrm.

Android 9 memperkenalkan metode ke class MediaDRM untuk mendapatkan metrik, tingkat HDCP, tingkat keamanan, dan jumlah sesi, serta untuk menambahkan kontrol lebih besar atas tingkat keamanan dan perhentian aman. Lihat laporan Perbedaan API untuk mengetahui detailnya.

Di Android 9, AAudio API menambahkan dukungan untuk beberapa atribut AAudioStream tambahan, termasuk penggunaan, jenis konten, dan preset input. Dengan atribut ini, Anda dapat membuat streaming yang disesuaikan untuk aplikasi VoIP atau perekam video. Anda juga dapat menetapkan ID sesi untuk mengaitkan streaming AAudio dengan submix yang dapat menyertakan efek. Gunakan AudioEffect API untuk mengontrol efek.

Android 9 memperkenalkan AudioEffect API untuk pemrosesan dinamis. Dengan class ini, Anda dapat membuat efek audio berbasis saluran—termasuk ekualisasi, kompresi multi-band, dan pembatas—di beberapa tahap. Jumlah band dan tahapan aktif dapat dikonfigurasi, dan sebagian besar parameter dapat dikontrol secara real time.

Sensitivitas biaya data di JobScheduler

Mulai Android 9, JobScheduler dapat menggunakan sinyal status jaringan yang disediakan oleh operator untuk meningkatkan penanganan tugas terkait jaringan.

Tugas dapat menyatakan perkiraan ukuran data, pengambilan data sinyal, dan menentukan persyaratan jaringan yang mendetail. JobScheduler kemudian mengelola tugas sesuai dengan status jaringan. Misalnya, saat sinyal jaringan menandakan bahwa jaringan sedang padat, JobScheduler mungkin menunda permintaan jaringan yang berukuran besar. Saat berada di jaringan tidak berbayar, JobScheduler dapat menjalankan tugas pengambilan data untuk meningkatkan pengalaman pengguna, seperti dengan mengambil data judul.

Saat menambahkan tugas, pastikan Anda menggunakan setEstimatedNetworkBytes(), setPrefetch(), dan setRequiredNetwork() jika diperlukan untuk membantu JobScheduler menangani pekerjaan dengan benar. Saat tugas dijalankan, pastikan untuk menggunakan objek Network yang ditampilkan oleh JobParameters.getNetwork(). Jika tidak, Anda secara tidak langsung menggunakan jaringan default perangkat yang mungkin tidak memenuhi persyaratan Anda, sehingga menyebabkan penggunaan data yang tidak diinginkan.

Neural Networks API 1.1

Neural Networks API diperkenalkan di Android 8.1 (API level 27) untuk mempercepat machine learning di perangkat di Android. Android 9 memperluas dan meningkatkan API, sehingga menambahkan dukungan untuk sembilan operasi baru:

Masalah umum: Saat meneruskan Tensor ANEURALNETWORKS_TENSOR_QUANT8_ASYMM ke operasi ANEURALNETWORKS_PAD, yang tersedia di Android 9 dan yang lebih tinggi, output dari NNAPI mungkin tidak cocok dengan output dari framework machine learning tingkat tinggi, seperti TensorFlow Lite. Sebaiknya Anda hanya meneruskan ANEURALNETWORKS_TENSOR_FLOAT32 sampai masalah teratasi.

Selain itu, API ini juga memperkenalkan fungsi baru, ANeuralNetworksModel_relaxComputationFloat32toFloat16(), yang memungkinkan Anda menentukan apakah akan menghitung ANEURALNETWORKS_TENSOR_FLOAT32 dengan rentang dan presisi yang serendah format floating point 16-bit IEEE 754.

Framework isi otomatis

Android 9 memperkenalkan beberapa peningkatan yang dapat diterapkan oleh layanan isi otomatis untuk lebih meningkatkan pengalaman pengguna saat mengisi formulir. Untuk mempelajari lebih lanjut cara menggunakan fitur isi otomatis di aplikasi Anda, lihat panduan Framework Isi Otomatis.

Penyempurnaan keamanan

Android 9 memperkenalkan sejumlah fitur keamanan, yang dirangkum di bagian berikut:

Konfirmasi Dilindungi oleh Android

Perangkat didukung yang menjalankan Android 9 atau yang lebih tinggi memberi Anda kemampuan untuk menggunakan Konfirmasi Dilindungi oleh Android. Saat menggunakan alur kerja ini, aplikasi Anda akan menampilkan perintah kepada pengguna untuk menyetujui pernyataan singkat. Pernyataan ini memungkinkan aplikasi untuk menegaskan bahwa pengguna ingin menyelesaikan transaksi yang sensitif, seperti melakukan pembayaran.

Jika pengguna menyetujui pernyataan tersebut, Android Keystore akan menerima dan menyimpan tanda tangan kriptografi yang dilindungi oleh kode autentikasi pesan hash (HMAC) yang dilengkapi kunci. Setelah Android Keystore mengonfirmasi validitas pesan, aplikasi Anda dapat menggunakan kunci yang dihasilkan dari trustedConfirmationRequired di trusted execution environment (TEE) untuk menandatangani pesan yang diterima pengguna. Tanda tangan tersebut menunjukkan, dengan keyakinan yang sangat tinggi, bahwa pengguna telah melihat pernyataan tersebut dan telah menyetujuinya.

Perhatian: Konfirmasi Dilindungi oleh Android tidak menyediakan saluran informasi yang aman bagi pengguna. Aplikasi Anda tidak boleh berasumsi bahwa ada jaminan kerahasiaan selain yang ditawarkan oleh platform Android. Secara khusus, jangan gunakan alur kerja ini untuk menampilkan informasi sensitif yang biasanya tidak akan Anda tampilkan di perangkat pengguna.

Untuk panduan cara menambahkan dukungan untuk Konfirmasi Dilindungi oleh Android, lihat panduan Android Protected Confirmation.

Dialog autentikasi biometrik terpadu

Di Android 9, sistem menyediakan dialog autentikasi biometrik atas nama aplikasi Anda. Fungsi ini menghasilkan tampilan, nuansa, dan penempatan standar untuk dialog, sehingga pengguna lebih yakin bahwa mereka melakukan autentikasi terhadap pemeriksa kredensial biometrik yang tepercaya.

Jika aplikasi Anda menggunakan FingerprintManager untuk menampilkan dialog autentikasi sidik jari kepada pengguna, beralihlah untuk menggunakan BiometricPrompt. BiometricPrompt bergantung pada sistem untuk menampilkan dialog autentikasi. API ini juga mengubah perilakunya untuk beradaptasi dengan jenis autentikasi biometrik yang telah dipilih pengguna.

Modul keamanan hardware

Perangkat yang didukung yang menjalankan Android 9 atau yang lebih tinggi dapat memiliki StrongBox Balancer, yaitu implementasi SKAdNetwork HAL yang berada dalam modul keamanan hardware. Modul ini berisi hal-hal berikut:

  • CPU-nya sendiri.
  • Penyimpanan aman.
  • Generator angka-acak sebenarnya.
  • Mekanisme tambahan untuk menahan modifikasi paket dan sideload aplikasi yang tidak sah.

Saat memeriksa kunci yang disimpan dalam StrongBox otorisasi, sistem akan menguatkan integritas kunci dengan Trusted Execution Environment (TEE).

Untuk mempelajari penggunaan Strongbox otorisasi lebih lanjut, lihat Modul Keamanan Hardware.

Impor kunci aman ke Keystore

Android 9 memberikan keamanan dekripsi kunci tambahan dengan menambahkan kemampuan untuk mengimpor kunci terenkripsi dengan aman ke dalam Keystore menggunakan format kunci yang dienkode dengan ASN.1. SKAdNetwork kemudian mendekripsi kunci dalam Keystore, sehingga isi kunci tidak pernah muncul sebagai teks biasa dalam memori host perangkat.

Pelajari lebih lanjut cara Mengimpor kunci terenkripsi dengan lebih aman.

Skema tanda tangan APK dengan rotasi kunci

Android 9 menambahkan dukungan untuk APK Signature Scheme v3. Skema ini memiliki opsi untuk menyertakan data bukti rotasi dalam blok penandatanganannya untuk setiap sertifikat penandatanganan. Kemampuan ini memungkinkan aplikasi Anda ditandatangani menggunakan sertifikat penandatanganan baru dengan menautkan sertifikat penandatanganan sebelumnya file APK tersebut ke sertifikat yang sekarang digunakan untuk menandatanganinya.

Pelajari lebih lanjut cara merotasi kunci menggunakan apksigner.

Opsi untuk mengizinkan dekripsi kunci hanya di perangkat yang tidak terkunci

Android 9 memperkenalkan flag unlockedDeviceRequired. Opsi ini menentukan apakah Keystore mengharuskan layar untuk dibuka kuncinya sebelum mengizinkan dekripsi data yang sedang berlangsung atau yang disimpan menggunakan kunci yang ditentukan. Jenis kunci ini sangat cocok untuk mengenkripsi data sensitif untuk disimpan di disk, seperti data kesehatan atau perusahaan. Tanda tersebut memberi pengguna jaminan yang lebih tinggi bahwa data tidak dapat didekripsi saat perangkat terkunci jika ponsel mereka hilang atau dicuri.

Untuk menjaga keamanan kunci dari dekripsi saat perangkat terkunci, aktifkan flag dengan meneruskan true ke metode setUnlockedDeviceRequired(). Setelah menyelesaikan langkah ini, saat layar pengguna terkunci, setiap upaya untuk mendekripsi atau menandatangani data menggunakan kunci ini akan gagal. Perangkat yang terkunci memerlukan PIN, sandi, sidik jari, atau faktor tepercaya lainnya sebelum dapat diakses.

Dukungan enkripsi lama

Perangkat Android 9 yang dilengkapi dengan ISRC 4 mendukung Triple Data Encryption Algorithm, atau Triple DES. Jika aplikasi Anda berinteroperasi dengan sistem lama yang memerlukan Triple DES, gunakan jenis cipher ini saat mengenkripsi kredensial yang sensitif.

Untuk mempelajari lebih lanjut cara membuat aplikasi Anda lebih aman, lihat Keamanan untuk Developer Android.

Penghentian WPS

Wi-Fi Protected Setup (WPS) tidak digunakan lagi karena alasan keamanan.

Cadangan Android

Android 9 menambahkan fungsi dan opsi developer baru yang terkait dengan pencadangan dan pemulihan. Detail tentang perubahan ini ditampilkan di bagian berikut.

Cadangan enkripsi sisi klien

Android 9 menambahkan dukungan untuk mengenkripsi cadangan Android dengan rahasia sisi klien. Dukungan ini diaktifkan secara otomatis saat kondisi berikut terpenuhi:

Jika langkah privasi ini diaktifkan, PIN, pola, atau sandi perangkat diperlukan untuk memulihkan data dari cadangan yang dibuat oleh perangkat pengguna. Untuk mempelajari teknologi di balik fitur ini lebih lanjut, lihat laporan resmi Layanan Google Cloud Key Vault.

Menetapkan kondisi perangkat yang diperlukan untuk pencadangan

Jika data aplikasi Anda menyertakan informasi atau preferensi sensitif, Android 9 memberi Anda kemampuan untuk menentukan kondisi perangkat tempat data aplikasi Anda disertakan dalam cadangan pengguna, seperti saat enkripsi sisi klien diaktifkan atau sedang berlangsung transfer antar-perangkat lokal.

Untuk mempelajari lebih lanjut cara mencadangkan data di perangkat Android, lihat Ringkasan Pencadangan Data.

Aksesibilitas

Android 9 memperkenalkan peningkatan pada framework aksesibilitas yang mempermudah penyediaan pengalaman yang lebih baik kepada pengguna aplikasi Anda.

Semantik navigasi

Atribut yang ditambahkan di Android 9 memudahkan Anda menentukan cara layanan aksesibilitas, terutama pembaca layar, menavigasi dari satu bagian layar ke bagian layar yang lain. Atribut ini dapat membantu pengguna penyandang gangguan penglihatan untuk dengan cepat menelusuri teks di UI aplikasi Anda dan memungkinkan mereka membuat pilihan.

Misalnya, dalam aplikasi belanja, pembaca layar dapat membantu pengguna menavigasi langsung dari satu kategori promo ke promo berikutnya, tanpa mengharuskan pembaca layar membaca semua item dalam kategori sebelum beralih ke kategori berikutnya.

Judul panel aksesibilitas

Di Android 8.1 (API level 27) dan yang lebih rendah, layanan aksesibilitas tidak selalu dapat menentukan kapan panel tertentu pada layar diupdate, seperti saat suatu aktivitas mengganti satu fragmen dengan fragmen lain. Panel terdiri dari elemen UI yang dikelompokkan secara logis dan terkait secara visual yang biasanya terdiri dari fragmen.

Di Android 9, Anda dapat memberikan judul panel aksesibilitas, atau judul yang dapat diidentifikasi secara individual, untuk panel ini. Jika panel memiliki judul panel aksesibilitas, layanan aksesibilitas akan menerima informasi yang lebih mendetail saat panel berubah. Kemampuan ini memungkinkan layanan memberikan informasi yang lebih terperinci kepada pengguna tentang perubahan di UI.

Untuk menentukan judul panel, gunakan atribut android:accessibilityPaneTitle. Anda juga dapat memperbarui judul panel UI yang diganti saat runtime menggunakan setAccessibilityPaneTitle(). Misalnya, Anda dapat memberikan judul untuk area konten objek Fragment.

Navigasi berbasis judul

Jika aplikasi Anda menampilkan konten tekstual yang menyertakan judul logis, tetapkan atribut android:accessibilityHeading ke true untuk instance View yang mewakili judul tersebut. Dengan menambahkan judul ini, Anda mengizinkan layanan aksesibilitas untuk membantu pengguna menavigasi langsung dari satu judul ke judul berikutnya. Semua layanan aksesibilitas dapat menggunakan kemampuan ini untuk meningkatkan pengalaman navigasi UI pengguna.

Navigasi dan output grup

Pembaca layar biasanya menggunakan atribut android:focusable untuk menentukan kapan harus membaca ViewGroup, atau kumpulan objek View, sebagai satu unit. Dengan begitu, pengguna dapat memahami bahwa penayangan tersebut terkait secara logis satu sama lain.

Di Android 8.1 dan yang lebih lama, Anda harus menandai setiap objek View dalam ViewGroup sebagai tidak dapat difokuskan dan ViewGroup itu sendiri sebagai dapat difokuskan. Pengaturan ini menyebabkan beberapa instance View ditandai sebagai dapat difokuskan sehingga membuat navigasi keyboard menjadi lebih rumit.

Mulai Android 9, Anda dapat menggunakan atribut android:screenReaderFocusable sebagai pengganti atribut android:focusable dalam situasi ketika membuat objek View yang dapat difokuskan memiliki konsekuensi yang tidak diinginkan. Pembaca layar menempatkan fokus pada semua elemen yang telah menetapkan android:screenReaderFocusable atau android:focusable ke true.

Tindakan kemudahan

Android 9 menambahkan dukungan untuk melakukan tindakan kemudahan atas nama pengguna:

Interaksi dengan tooltip
Menambahkan fitur dalam framework aksesibilitas memberi Anda akses ke tooltip di UI aplikasi. Gunakan getTooltipText() untuk membaca teks tooltip, dan gunakan ACTION_SHOW_TOOLTIP dan ACTION_HIDE_TOOLTIP untuk menginstruksikan instance View guna menampilkan atau menyembunyikan tooltip.
Tindakan global ditambahkan
Android 9 memperkenalkan dukungan untuk dua tindakan perangkat tambahan di class AccessibilityService. Layanan Anda dapat membantu pengguna mengunci perangkat dan mengambil screenshot menggunakan tindakan GLOBAL_ACTION_LOCK_SCREEN dan GLOBAL_ACTION_TAKE_SCREENSHOT.

Detail perubahan jendela

Android 9 mempermudah pelacakan update jendela aplikasi saat aplikasi menggambar ulang beberapa jendela secara bersamaan. Saat peristiwa TYPE_WINDOWS_CHANGED terjadi, gunakan getWindowChanges() API untuk menentukan bagaimana jendela berubah. Selama update multiaplikasi, setiap jendela menghasilkan kumpulan peristiwanya sendiri. Metode getSource() menampilkan tampilan root jendela yang terkait dengan setiap peristiwa.

Jika aplikasi telah menentukan judul panel aksesibilitas untuk objek View-nya, layanan Anda dapat mengenali kapan UI aplikasi diupdate. Saat peristiwa TYPE_WINDOW_STATE_CHANGED terjadi, gunakan jenis yang ditampilkan oleh getContentChangeTypes() untuk menentukan bagaimana jendela berubah. Misalnya, framework dapat mendeteksi kapan panel memiliki judul baru, atau ketika panel menghilang.

Rotasi

Untuk menghilangkan rotasi yang tidak disengaja, kami telah menambahkan mode yang membatasi orientasi saat ini meskipun posisi perangkat berubah. Pengguna dapat memicu rotasi secara manual saat diperlukan dengan menekan tombol di kolom sistem.

Dampak kompatibilitas bagi aplikasi sangat minim dalam banyak kasus. Namun, jika aplikasi memiliki perilaku rotasi yang disesuaikan atau menggunakan setelan orientasi layar yang tidak biasa, Anda mungkin akan mengalami masalah yang tidak diketahui sebelumnya, saat preferensi rotasi pengguna selalu disetel ke potret. Sebaiknya lihat perilaku rotasi di semua aktivitas utama aplikasi Anda dan pastikan semua setelan orientasi layar masih memberikan pengalaman yang optimal.

Untuk mengetahui detail selengkapnya, lihat perubahan perilaku terkait.

Memutar ponsel yang menampilkan mode rotasi baru yang memungkinkan pengguna memicu rotasi secara manual

Mode rotasi baru memungkinkan pengguna memicu rotasi secara manual saat diperlukan menggunakan tombol di bilah sistem.

Teks

Android 9 menghadirkan fitur terkait teks berikut ke platform ini:

  • Teks Prakomputasi: Class PrecomputedText meningkatkan performa rendering teks dengan memungkinkan Anda menghitung dan meng-cache informasi yang diperlukan terlebih dahulu. Hal ini juga memungkinkan aplikasi Anda menjalankan tata letak teks di luar thread utama.

  • Magnifier: Class Magnifier adalah widget platform yang menyediakan API kaca pembesar, yang memungkinkan pengalaman fitur pembesar yang konsisten di semua aplikasi.

  • Smart Linkify: Android 9 meningkatkan class TextClassifier, yang memanfaatkan machine learning untuk mengidentifikasi beberapa entity dalam teks yang dipilih dan menyarankan tindakan. Misalnya, TextClassifier dapat mengaktifkan aplikasi Anda untuk mendeteksi bahwa pengguna telah memilih nomor telepon. Aplikasi Anda kemudian dapat menyarankan agar pengguna melakukan panggilan telepon menggunakan nomor tersebut. Fitur dalam TextClassifier menggantikan fungsi class Linkify.

  • Tata Letak Teks: Beberapa metode dan atribut yang praktis memudahkan penerapan desain UI Anda. Untuk mengetahui detailnya, lihat dokumentasi referensi untuk TextView.

Konversi file DEX terlebih dahulu ART

Pada perangkat yang menjalankan Android 9 atau yang lebih tinggi, compiler awal runtime Android (ART) akan lebih mengoptimalkan file format Dalvik Executable (DEX) yang dikompresi dengan mengonversi file DEX dalam paket aplikasi menjadi representasi yang lebih ringkas. Perubahan ini memungkinkan aplikasi Anda dimulai lebih cepat serta menggunakan lebih sedikit ruang disk dan RAM.

Peningkatan ini sangat menguntungkan perangkat kelas bawah dengan kecepatan I/O disk yang lebih lambat.

Pelacakan sistem di perangkat

Android 9 memungkinkan Anda merekam pelacakan sistem dari perangkat, lalu membagikan laporan rekaman ini kepada tim pengembangan. Laporan ini mendukung berbagai format, termasuk HTML.

Dengan mengumpulkan rekaman aktivitas ini, Anda dapat mengambil data waktu yang terkait dengan proses dan thread aplikasi serta melihat jenis status perangkat lain yang signifikan secara global.

Untuk mempelajari alat ini lebih lanjut, lihat Melakukan pelacakan sistem di perangkat.