Fitur dan API Android 9

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

Untuk mempelajari API baru ini, baca laporan perbedaan API atau buka Referensi API Android. Pastikan juga untuk membaca Perubahan Perilaku Android 9 guna mempelajari area mana saja dalam 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 Wi-Fi IEEE 802.11-2016 —juga dikenal sebagai Wi-Fi Round-Trip-Time (RTT)—agar Anda dapat memanfaatkannya pemosisian dalam ruangan di aplikasi Anda.

Pada perangkat yang menjalankan Android 9 dengan dukungan hardware, aplikasi Anda bisa menggunakan RTT API untuk mengukur jarak ke titik akses (AP) (AP) Wi-Fi berkemampuan RTT terdekat. Perangkat harus memiliki layanan lokasi dan pemindaian Wi-Fi diaktifkan (di bagian Setelan > Lokasi), dan aplikasi Anda harus memiliki ACCESS_FINE_LOCATION izin akses. 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 multilaterasi untuk memperkirakan posisi perangkat yang paling sesuai pengukuran. Hasilnya biasanya akurat 1 hingga 2 meter.

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

Lihat Wi-Fi RTT API yang digunakan di Aplikasi demo Android WifiRttScan.

Untuk informasi selengkapnya, lihat Lokasi Wi-Fi: mengukur jarak dengan RTT.

Dukungan potongan layar

Layar opsi developer menunjukkan ukuran cutout yang berbeda

Menguji potongan layar menggunakan emulator

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

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

Anda dapat menyimulasikan cutout layar pada 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 cutout.
  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 tinggi.

Notifikasi pesan

MessagingStyle dengan foto terlampir.

Notifikasi pesan

MessagingStyle dengan balasan dan percakapan.

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

Pengalaman fitur pesan yang ditingkatkan

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

  • Penyederhanaan dukungan untuk peserta percakapan: Person kelas digunakan untuk mengidentifikasi orang-orang yang terlibat dalam percakapan, termasuk avatar dan URI. Banyak API lain, seperti addMessage(), sekarang manfaatkan 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 untuk 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 dikirim oleh sistem ketika pengguna secara tidak sengaja menutup notifikasi pesan. Anda dapat menggunakan tambahan ini untuk mengisi otomatis kolom teks di aplikasi sehingga pengguna dapat menyelesaikan balasannya.

  • Mengidentifikasi apakah percakapan adalah percakapan grup: Anda dapat menggunakan setGroupConversation() untuk mengidentifikasi percakapan sebagai percakapan grup atau non-grup.

  • Tetapkan tindakan semantik untuk sebuah intent: setSemanticAction() memungkinkan Anda memberikan makna semantik pada suatu tindakan, seperti sebagai “tandai telah dibaca”, "hapus", "balas," dan seterusnya.

  • SmartReply: Android 9 mendukung saran balasan yang sama dengan yang tersedia di aplikasi pesan. Gunakan RemoteInput.setChoices() untuk menyediakan berbagai tanggapan standar kepada pengguna.

Setelan channel, siaran, dan mode Jangan Ganggu

Android 8.0 memperkenalkan Saluran Notifikasi, 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 pengaturan notifikasi untuk sebuah aplikasi. Anda dapat menggunakan isBlocked() metode untuk mengidentifikasi kapan sebuah grup diblokir dan, akibatnya, tidak mengirim notifikasi untuk channel dalam grup tersebut.

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

  • 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 sesuai dengan keadaan. Untuk informasi selengkapnya tentang tindakan dan tambahan intent ini, mengacu pada daftar konstanta terupdate dalam NotificationManager alamat IP internal. Untuk informasi tentang respons terhadap intent siaran, lihat Siaran.

  • NotificationManager.Policy memiliki tiga kategori prioritas Do-Not-Disturb baru:

  • NotificationManager.Policy juga memiliki tujuh konstanta Do-Not-Disturb baru yang dapat Anda gunakan untuk meminimalkan gangguan visual:

Dukungan multi-kamera dan update kamera

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

Penyempurnaan 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 harus berhenti dan memulai streaming kamera. Kami juga telah menambahkan API untuk flash berbasis tampilan tim dukungan dan akses ke OIS stempel waktu untuk efek khusus dan stabilisasi gambar tingkat aplikasi.

Di Android 9, API multi-kamera 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 USB/UVC eksternal kamera aktif perangkat yang didukung.

ImageDecoder untuk drawable dan bitmap

Android 9 memperkenalkan ImageDecoder , yang menyediakan pendekatan modern untuk mendekode gambar. Gunakan kelas ini bukan BitmapFactory dan BitmapFactory.Options Google Cloud Platform.

ImageDecoder memungkinkan Anda membuat Drawable atau Bitmap dari buffer byte, file, atau URI. Untuk mendekode gambar, panggil terlebih dahulu createSource() dengan sumber gambar yang dienkode. Kemudian, panggil decodeDrawable() atau decodeBitmap() dengan meneruskan ImageDecoder.Source objek 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 dari 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 rumit dan disesuaikan pada gambar seperti sudut membulat atau masker lingkaran. Gunakan setPostProcessor() dengan instance PostProcessor untuk menjalankan perintah menggambar apa pun yang diinginkan.

Animasi

Android 9 memperkenalkan class AnimatedImageDrawable untuk menggambar dan menampilkan gambar animasi GIF dan WebP. Cara kerja AnimatedImageDrawable mirip dengan AnimatedVectorDrawable di mana thread render mendorong animasi AnimatedImageDrawable. Render thread juga menggunakan thread pekerja untuk melakukan dekode, sehingga proses dekode tidak mengganggu operasi lain pada thread render. Implementasi ini memungkinkan aplikasi Anda untuk menampilkan gambar animasi tanpa mengelola pembaruan atau mengganggu peristiwa lain pada UI thread aplikasi Anda.

AnimatedImageDrawable dapat didekode menggunakan instance ImageDecoder. Hal berikut cuplikan kode menunjukkan cara menggunakan ImageDecoder untuk mendekode AnimatedImageDrawable:

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 setPostProcessor() untuk memodifikasi tampilan gambar, seperti menerapkan mask lingkaran atau sudut membulat.

Video HDR VP9, kompresi gambar HEIF, dan Media API

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

Android 9 juga menambahkan dukungan untuk mengenkode gambar menggunakan Gambar Efisiensi Tinggi Format file (HEIF (HEIC), yang meningkatkan kompresi dan mengurangi ruang penyimpanan dan data jaringan tingkat penggunaan. Contoh gambar diam HEIF didukung dalam class MediaMuxer dan MediaExtractor. Dengan dukungan platform pada perangkat Android 9, kini mengirim dan menggunakan gambar HEIF dari server backend Anda bisa dilakukan dengan mudah. Setelah Anda memastikan bahwa kompatibel dengan format data ini untuk berbagi dan menampilkan, cobalah 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 HEIF gambar diam dari buffer byte YUV, atau instance Surface atau Bitmap.

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

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

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

Android 9 memperkenalkan AudioEffect API untuk pemrosesan dinamika. Dengan class ini, Anda bisa membuat efek audio berbasis channel, termasuk ekualisasi, kompresi multi-band, dan pembatas—di berbagai tahap. Tujuan jumlah pita dan tahap aktif dapat dikonfigurasi, dan sebagian besar parameter dapat terkontrol secara real time.

Sensitivitas biaya data di JobScheduler

Mulai Android 9, JobScheduler dapat menggunakan sinyal status jaringan yang disediakan oleh operator untuk meningkatkan penanganan pekerjaan yang berhubungan dengan jaringan.

Tugas bisa mendeklarasikan perkiraan ukuran data, pengambilan sinyal, dan menentukan persyaratan jaringan yang terperinci. JobScheduler kemudian mengelola pekerjaan sesuai dengan mengetahui status jaringan. Misalnya, saat jaringan menandakan bahwa jaringan sedang padat, JobScheduler mungkin menunda permintaan jaringan yang berukuran besar. Saat berada di jaringan tanpa kuota, JobScheduler dapat menjalankan tugas prefetch untuk meningkatkan pengalaman pengguna, seperti dengan memuat awal judul utama.

Saat menambahkan tugas, pastikan untuk menggunakan setEstimatedNetworkBytes(), setPrefetch(), dan setRequiredNetwork() jika sesuai untuk membantu JobScheduler menangani pekerjaan dengan benar. Saat tugas Anda dijalankan, pastikan untuk menggunakan objek Network yang ditampilkan oleh JobParameters.getNetwork(). Jika tidak, Anda secara implisit akan 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 Android. Android 9 memperluas dan meningkatkan API, serta menambahkan mendukung sembilan operasi baru:

Masalah umum: Saat meneruskan ANEURALNETWORKS_TENSOR_QUANT8_ASYMM tensor ke ANEURALNETWORKS_PAD , yang tersedia di Android 9 dan yang lebih tinggi, output dari NNAPI mungkin tidak cocok dengan output dari mesin dengan level lebih tinggi framework pembelajaran, seperti TensorFlow Lite. Anda seharusnya hanya meneruskan ANEURALNETWORKS_TENSOR_FLOAT32 hingga 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 serendah format floating point 16-bit IEEE 754.

Framework isi otomatis

Android 9 memperkenalkan beberapa peningkatan yang fitur isi otomatis diterapkan 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 dalam bagian berikut:

Konfirmasi Dilindungi oleh Android

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

Jika pengguna menyetujui pernyataan tersebut, Android Keystore akan menerima dan menyimpan tanda tangan kriptografis yang dilindungi oleh autentikasi pesan {i>hash<i} dengan kunci (HMAC). Setelah Android Keystore mengonfirmasi validitas pesan, aplikasi Anda dapat menggunakan kunci yang dihasilkan dari trustedConfirmationRequired di {i>Execution environment<i} (TEE) untuk menandatangani pesan yang diterima pengguna. Tujuan tanda tangan menunjukkan, dengan keyakinan sangat tinggi, bahwa pengguna telah melihat dan telah menyetujuinya.

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

Untuk panduan tentang menambahkan dukungan untuk Android Protected Confirmation, lihat panduan Android Protected Confirmation.

Dialog autentikasi biometrik terpadu

Di Android 9, sistem menyediakan dialog autentikasi biometrik atas nama aplikasi Anda. Fungsi ini menciptakan tampilan, nuansa, dan penempatan yang terstandardisasi untuk dialog, sehingga memberikan kepercayaan kepada pengguna bahwa mereka sedang melakukan otentikasi pemeriksa kredensial biometrik yang tepercaya.

Jika aplikasi Anda menggunakan FingerprintManager menampilkan dialog autentikasi sidik jari kepada pengguna, beralihlah ke BiometricPrompt sebagai gantinya. BiometricPrompt mengandalkan sistem untuk menampilkan dialog autentikasi. Ia juga mengubah perilakunya untuk menyesuaikan dengan jenis autentikasi biometrik yang telah dipilih pengguna.

Modul keamanan hardware

Perangkat yang didukung dan menjalankan Android 9 atau yang lebih tinggi juga dapat memiliki StrongBox Keymaster, suatu implementasi Keymaster 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 mencegah modifikasi paket dan sideload tanpa izin aplikasi.

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

Untuk mempelajari lebih lanjut cara menggunakan Strongbox Keymaster, 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 ke ASN.1. Keymaster kemudian membongkar enkripsi kunci di dalam Keystore, sehingga konten kunci tidak pernah muncul sebagai teks biasa dalam memori host perangkat.

Pelajari lebih lanjut cara Mengimpor kunci terenkripsi secara 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 penandatangannya untuk setiap sertifikat penandatanganan. Kemampuan ini memungkinkan aplikasi Anda ditandatangani dengan penandatanganan baru dengan menautkan sertifikat penandatanganan sebelumnya dari file APK ke sertifikat yang yang sekarang ditandatangani.

Pelajari lebih lanjut cara merotasi kunci menggunakan apksigner.

Opsi untuk mengizinkan dekripsi kunci hanya pada perangkat yang tidak terkunci

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

Untuk menjaga keamanan kunci dari dekripsi saat perangkat terkunci, aktifkan tanda dengan meneruskan true ke setUnlockedDeviceRequired() . Setelah menyelesaikan langkah ini, ketika layar pengguna terkunci, semua mencoba membongkar enkripsi atau menandatangani data dengan kunci ini gagal. Perangkat yang dikunci memerlukan PIN, sandi, sidik jari, atau beberapa faktor tepercaya lainnya sebelum dapat diakses.

Dukungan enkripsi lama

Perangkat Android 9 yang dilengkapi dengan Keymaster 4 mendukung Triple Data {i>Encryption Algorithm, <i} atau Triple DES. Jika aplikasi Anda berinteroperasi dengan sistem lama yang memerlukan Triple DES, gunakan jenis cipher ini saat mengenkripsi kredensial 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 fungsionalitas dan opsi developer baru yang terkait dengan pencadangan dan pemulihan. Detail tentang perubahan ini muncul di halaman berikut bagian.

Cadangan enkripsi sisi klien

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

Jika langkah privasi ini diaktifkan, PIN, pola, atau sandi perangkat diperlukan untuk memulihkan data dari pencadangan yang dibuat oleh perangkat pengguna. Untuk mempelajari selengkapnya tentang teknologi di balik fitur ini, lihat Google Cloud Key Vault Laporan resmi layanan.

Menetapkan kondisi perangkat yang diperlukan untuk pencadangan

Jika data aplikasi Anda berisi informasi atau preferensi sensitif, Android 9 memberi Anda kemampuan untuk menentukan kondisi perangkat yang mengatur penyertaan data aplikasi Anda dalam cadangan pengguna, seperti saat enkripsi sisi klien diaktifkan atau transfer perangkat ke perangkat lokal sedang berlangsung.

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

Aksesibilitas

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

Semantik navigasi

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

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

Judul panel aksesibilitas

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

Di Android 9, Anda dapat memberikan judul panel aksesibilitas, atau secara terpisah judul yang dapat diidentifikasi, untuk panel ini. Jika panel memiliki judul panel aksesibilitas, layanan aksesibilitas menerima informasi yang lebih detail saat panel berubah. Kemampuan ini memungkinkan layanan memberikan informasi yang lebih terperinci kepada pengguna mengenai perubahan yang terjadi 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 heading

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

Navigasi dan output grup

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

Di Android 8.1 dan yang lebih rendah, Anda harus menandai setiap objek View dalam ViewGroup sebagai non-focusable dan ViewGroup itu sendiri sebagai focusable. Pengaturan ini menyebabkan beberapa instance View ditandai sebagai fokus sehingga membuat navigasi keyboard menjadi lebih rumit.

Mulai Android 9, Anda dapat menggunakan android:screenReaderFocusable sebagai pengganti atribut android:focusable dalam situasi ketika membuat objek View 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
Fitur tambahan 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 tooltipnya.
Menambahkan tindakan global
Android 9 memperkenalkan dukungan untuk dua tindakan perangkat tambahan di AccessibilityService . Layanan Anda dapat membantu pengguna mengunci perangkat dan mengambil screenshot menggunakan GLOBAL_ACTION_LOCK_SCREEN dan GLOBAL_ACTION_TAKE_SCREENSHOT masing-masing.

Detail perubahan jendela

Android 9 memudahkan pelacakan update jendela aplikasi saat aplikasi menggambar ulang beberapa jendela secara bersamaan. Ketika seorang TYPE_WINDOWS_CHANGED yang terjadi, gunakan getWindowChanges() API untuk menentukan perubahan jendela. Selama update multi-aplikasi, setiap jendela akan menghasilkan kumpulan peristiwanya sendiri. getSource() mengembalikan tampilan root jendela yang terkait dengan setiap peristiwa.

Jika aplikasi telah menentukan judul panel aksesibilitas untuk Objek View, layanan Anda dapat mengenali jika UI aplikasi diupdate. Saat peristiwa TYPE_WINDOW_STATE_CHANGED terjadi, gunakan jenis yang ditampilkan oleh getContentChangeTypes() untuk menentukan bagaimana jendela berubah. Misalnya, kerangka kerja dapat mendeteksi saat panel memiliki judul baru, atau saat panel menghilang.

Rotasi

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

Dampak kompatibilitas bagi aplikasi sangat minim dalam banyak kasus. Namun, jika aplikasi memiliki perilaku rotasi yang disesuaikan atau menggunakan orientasi layar yang tidak biasa pengaturan, Anda mungkin menemui masalah yang tidak terperhatikan sebelumnya, preferensi rotasi pengguna selalu disetel ke potret. Sebaiknya Anda melakukan melihat perilaku rotasi di semua aktivitas utama aplikasi Anda dan pastikan semua setelan orientasi layar Anda masih menyediakan pengalaman pengguna yang optimal.

Untuk detail selengkapnya, lihat perilaku terkait perubahan.

Memutar perangkat seluler 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 dalam platform:

  • Teks Prakomputasi: Class PrecomputedText meningkat performa rendering teks dengan memungkinkan Anda menghitung dan menyimpan cache yang diperlukan informasi sebelumnya. Hal ini juga memungkinkan aplikasi Anda melakukan tata letak teks di luar thread utama.

  • Kaca Pembesar: Class Magnifier adalah widget platform yang menyediakan magnifier API, yang memungkinkan pengalaman fitur kaca 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 bahwa pengguna melakukan panggilan telepon menggunakan nomor tersebut. Fitur di TextClassifier mengganti fungsi class Linkify.

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

Konversi dini ART untuk file DEX

Pada perangkat yang menjalankan Android 9 atau yang lebih tinggi, compiler awal Waktu Proses Android (ART) semakin 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 dan menggunakan lebih sedikit ruang disk dan RAM.

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

Pelacakan sistem di perangkat

Android 9 memungkinkan Anda merekam aktivitas sistem dari perangkat, kemudian membagikan laporan rekaman ini dengan tim pengembangan Anda. Laporan ini mendukung beberapa format, termasuk HTML.

Dengan mengumpulkan trace ini, Anda bisa menangkap data pengaturan waktu yang terkait dengan aplikasi proses dan thread serta melihat jenis perangkat lain yang signifikan secara global negara bagian.

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