Android 9 (level API 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 Android API. Pastikan juga untuk membaca Perubahan Perilaku Android 9 untuk mempelajari area yang mungkin terpengaruh oleh perubahan platform.
Pemosisian dalam ruangan dengan Wi-Fi RTT
Android 9 menambahkan dukungan platform untuk protokol Wi-Fi IEEE 802.11-2016—juga dikenal sebagai Wi-Fi Round-Trip-Time (RTT)—untuk memungkinkan Anda memanfaatkan penentuan posisi dalam ruangan di aplikasi Anda.
Di perangkat yang menjalankan Android 9 dengan dukungan hardware, aplikasi Anda dapat menggunakan
RTT API untuk mengukur
jarak ke titik akses (AP) Wi-Fi yang kompatibel dengan RTT di sekitar. 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 atau lebih banyak titik akses, Anda dapat menggunakan algoritma multilaterasi untuk memperkirakan posisi perangkat yang paling sesuai dengan pengukuran tersebut. Hasilnya biasanya akurat dalam jarak 1 hingga 2 meter.
Dengan akurasi ini, Anda dapat membangun pengalaman baru, seperti navigasi dalam gedung dan layanan berbasis lokasi yang akurat, seperti kontrol suara yang tidak ambigu (misalnya, "Nyalakan lampu ini") dan informasi berbasis lokasi (seperti "Apakah ada penawaran khusus untuk produk ini?").
Lihat penggunaan WiFi RTT API di aplikasi demo Android WifiRttScan.
Untuk mengetahui informasi selengkapnya, lihat Lokasi Wi-Fi: pengukuran jarak dengan RTT.
Dukungan potongan layar
Menguji potongan layar menggunakan emulator
Android 9 menawarkan dukungan untuk layar edge-to-edge terbaru yang berisi potongan layar untuk kamera dan speaker. Class
DisplayCutout
memungkinkan Anda mengetahui lokasi dan bentuk area yang tidak berfungsi 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 letak kontennya di sekitar potongan perangkat. Anda dapat menetapkan
atribut ini ke salah satu nilai berikut:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULTLAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGESLAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Anda dapat menyimulasikan potongan layar di perangkat atau emulator yang menjalankan Android 9 sebagai berikut:
- Aktifkan opsi developer.
- Di layar Opsi developer, scroll ke bawah ke bagian Gambar dan pilih Simulasikan layar dengan potongan.
- Pilih ukuran potongan.
Notifikasi
Android 9 memperkenalkan beberapa peningkatan pada notifikasi, yang semuanya tersedia bagi developer yang menargetkan level API 28 dan yang lebih tinggi.
MessagingStyle dengan foto terlampir.
MessagingStyle dengan balasan dan percakapan.
Untuk kode contoh yang menggunakan notifikasi, termasuk fitur Android 9, lihat People Sample.
Pengalaman pesan yang lebih baik
Mulai Android 7.0 (level API 24), Anda dapat menambahkan tindakan untuk membalas pesan atau memasukkan teks lain langsung dari notifikasi. Android 9 meningkatkan kualitas fitur ini dengan peningkatan berikut:
Dukungan yang disederhanakan untuk peserta percakapan: Class
Persondigunakan untuk mengidentifikasi orang yang terlibat dalam percakapan, termasuk avatar dan URI mereka. Banyak API lain, sepertiaddMessage(), kini memanfaatkan classPerson, bukanCharSequence. ClassPersonjuga mendukung pola desain Builder.Dukungan untuk gambar: Android 9 kini menampilkan gambar di Notifikasi Pesan di ponsel. Anda dapat menggunakan
setData()pada pesan untuk menampilkan gambar. Cuplikan kode berikut menunjukkan cara membuatPersondan 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);
Menyimpan balasan sebagai draf: Aplikasi Anda dapat mengambil
EXTRA_REMOTE_INPUT_DRAFTyang dikirim oleh sistem saat pengguna secara tidak sengaja menutup notifikasi pesan. Anda dapat menggunakan ekstra ini untuk mengisi kolom teks di aplikasi sebelumnya sehingga pengguna dapat menyelesaikan balasan mereka.Mengidentifikasi apakah percakapan adalah percakapan grup: Anda dapat menggunakan
setGroupConversation()untuk mengidentifikasi percakapan sebagai percakapan grup atau non-grup.Menetapkan tindakan semantik untuk intent: Metode
setSemanticAction()memungkinkan Anda memberikan makna semantik pada suatu tindakan, seperti "tandai sebagai sudah dibaca", "hapus", "balas", dan sebagainya.SmartReply: Android 9 mendukung saran balasan yang sama seperti yang tersedia di aplikasi pesan Anda. Gunakan
RemoteInput.setChoices()untuk memberikan serangkaian respons standar kepada pengguna.
Setelan channel, siaran, dan Jangan Ganggu
Android 8.0 memperkenalkan Saluran Notifikasi, yang memungkinkan Anda membuat saluran yang dapat disesuaikan pengguna untuk setiap jenis notifikasi yang ingin Anda tampilkan. Android 9 menyederhanakan setelan saluran notifikasi dengan perubahan berikut:
Memblokir grup channel: Pengguna kini dapat memblokir seluruh grup channel dalam setelan notifikasi untuk aplikasi. Anda dapat menggunakan metode
isBlocked()untuk mengidentifikasi kapan grup diblokir dan, sebagai hasilnya, tidak mengirimkan notifikasi untuk channel dalam grup tersebut.Selain itu, aplikasi Anda dapat membuat kueri untuk 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 dengan tepat. Untuk mengetahui informasi lebih lanjut tentang tindakan dan ekstra maksud ini, lihat daftar konstanta yang diperbarui dalam referensi
NotificationManager. Untuk mengetahui informasi tentang cara bereaksi terhadap intent siaran, lihat Siaran.NotificationManager.Policymemiliki tiga kategori prioritas Jangan Ganggu baru:PRIORITY_CATEGORY_ALARMSmemprioritaskan alarm.PRIORITY_CATEGORY_MEDIAmembuat prioritas suara dari sumber media, seperti media dan navigasi suara.PRIORITY_CATEGORY_SYSTEMmembuat suara sistem menjadi prioritas.
NotificationManager.Policyjuga memiliki tujuh konstanta Jangan Ganggu baru yang dapat Anda gunakan untuk menekan gangguan visual:SUPPRESSED_EFFECT_FULL_SCREEN_INTENTmencegah notifikasi meluncurkan aktivitas layar penuh.SUPPRESSED_EFFECT_LIGHTSmemblokir lampu notifikasi.SUPPRESSED_EFFECT_PEEKmencegah notifikasi meluncur sebentar ke dalam tampilan ("mengintip").SUPPRESSED_EFFECT_STATUS_BARmencegah notifikasi muncul di status bar pada perangkat yang mendukung status bar.SUPPRESSED_EFFECT_BADGEmemblokir badge di perangkat yang mendukung badge. Untuk mengetahui informasi selengkapnya, lihat Mengubah badge notifikasi.SUPPRESSED_EFFECT_AMBIENTmemblokir notifikasi di perangkat yang mendukung tampilan standby.SUPPRESSED_EFFECT_NOTIFICATION_LISTmencegah notifikasi muncul dalam tampilan daftar di perangkat yang mendukung tampilan daftar, seperti menu notifikasi atau layar kunci.
Dukungan multi-kamera dan update kamera
Di perangkat yang menjalankan Android 9, Anda dapat mengakses streaming secara bersamaan dari dua atau lebih kamera fisik. Di perangkat dengan kamera depan ganda atau kamera belakang ganda, Anda dapat membuat fitur inovatif yang tidak mungkin dilakukan hanya dengan satu kamera, seperti zoom, bokeh, dan penglihatan stereo yang lancar. API ini juga memungkinkan Anda memanggil streaming kamera logis atau gabungan yang otomatis beralih antara dua atau lebih kamera.
Peningkatan lain pada kamera mencakup Session parameters tambahan yang membantu mengurangi penundaan selama pengambilan gambar awal, dan berbagi permukaan yang memungkinkan klien kamera menangani berbagai kasus penggunaan tanpa perlu menghentikan dan memulai streaming kamera. Kami juga telah menambahkan API untuk dukungan flash berbasis layar dan akses ke stempel waktu OIS untuk stabilisasi gambar dan efek khusus tingkat aplikasi.
Di Android 9, API multi-kamera
mendukung kamera monokrom untuk perangkat dengan kemampuan
FULL atau
LIMITED.
Output monokrom dicapai melalui
YUV_420_888
format dengan Y sebagai skala abu-abu, U (Cb) sebagai 128, dan V (Cr) sebagai 128.
Android 9 juga memungkinkan dukungan untuk kamera USB/UVC eksternal di perangkat yang didukung.
ImageDecoder untuk drawable dan bitmap
Android 9 memperkenalkan class
ImageDecoder, yang menyediakan pendekatan modern untuk mendekode gambar. Gunakan class ini
alih-alih API BitmapFactory
dan BitmapFactory.Options.
ImageDecoder memungkinkan Anda membuat
Drawable atau
Bitmap dari buffer byte, file,
atau URI. Untuk mendekode gambar, panggil
createSource()
dengan sumber gambar yang dienkode terlebih dahulu. 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(). panggilan ImageDecoder
onHeaderDecoded()
dengan lebar dan tinggi default gambar, setelah diketahui.
Jika gambar yang dienkode adalah GIF animasi atau WebP, decodeDrawable() akan menampilkan
Drawable yang merupakan instance dari
AnimatedImageDrawable
class.
Ada berbagai metode yang dapat Anda gunakan untuk menetapkan properti gambar:
- Untuk menskalakan gambar yang didekode ke ukuran yang tepat, teruskan dimensi target ke
setTargetSize(). Anda juga dapat menskalakan gambar menggunakan ukuran sampel. Teruskan ukuran sampel langsung kesetTargetSampleSize(). - Untuk memangkas gambar dalam rentang gambar yang diskalakan, panggil
setCrop(). - Untuk membuat bitmap yang dapat diubah, teruskan
truekesetMutableRequired().
ImageDecoder juga memungkinkan Anda menambahkan efek yang disesuaikan dan rumit ke gambar, seperti sudut bulat 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
karena thread render menjalankan animasi AnimatedImageDrawable.
Thread render juga menggunakan thread pekerja untuk mendekode, sehingga proses dekode tidak mengganggu operasi lain pada thread render. Implementasi ini memungkinkan aplikasi Anda 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:
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 bulat.
Video VP9 HDR, kompresi gambar HEIF, dan Media API
Android 9 menyediakan dukungan bawaan untuk VP9 Profile 2 Rentang Dinamis Tinggi (HDR), sehingga Anda dapat menayangkan film yang kompatibel dengan HDR kepada pengguna dari YouTube, Play Film, dan sumber lainnya di perangkat yang kompatibel dengan HDR.
Android 9 juga menambahkan dukungan untuk mengenkode gambar menggunakan format File Gambar Efisiensi Tinggi (HEIF atau HEIC), yang meningkatkan kompresi dan mengurangi penggunaan ruang penyimpanan dan data jaringan. Contoh gambar diam HEIF didukung di class
MediaMuxer
dan MediaExtractor. Dengan dukungan platform di perangkat Android 9, Anda dapat dengan mudah mengirim dan menggunakan gambar HEIF dari server backend. Setelah memastikan bahwa aplikasi Anda kompatibel dengan format data ini untuk berbagi dan menampilkan, coba gunakan HEIF sebagai format penyimpanan gambar di aplikasi Anda. Anda dapat melakukan konversi jpeg ke heic menggunakan ImageDecoder atau BitmapFactory (yang mendapatkan bitmap dari file JPEG). Kemudian, Anda dapat menggunakan
HeifWriter untuk menulis gambar diam HEIF dari buffer byte YUV, atau instance
Surface atau
Bitmap.
Metrik media juga tersedia dari class
AudioTrack,
AudioRecord, dan MediaDrm.
Android 9 memperkenalkan metode untuk mendapatkan metrik, level HDCP, level keamanan, dan jumlah sesi, serta menambahkan kontrol lebih lanjut atas level keamanan dan penghentian yang aman untuk class MediaDRM. Lihat laporan Perbedaan API untuk mengetahui detailnya.
Di Android 9, API AAudio menambahkan
dukungan untuk beberapa atribut AAudioStream tambahan, termasuk penggunaan, jenis
konten, dan preset input. Dengan menggunakan atribut ini, Anda dapat membuat aliran yang disesuaikan untuk aplikasi VoIP atau camcorder. Anda juga dapat menyetel ID sesi untuk mengaitkan streaming AAudio dengan submix yang dapat menyertakan efek. Gunakan
API AudioEffect untuk mengontrol
efek.
Android 9 memperkenalkan
AudioEffect API untuk
pemrosesan dinamis.
Dengan class ini, Anda dapat membuat efek audio berbasis saluran—termasuk
equalisasi, kompresi multiband, dan limiter—di beberapa tahap. Jumlah band dan tahap 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 mendeklarasikan perkiraan ukuran data, memberi sinyal pengambilan data sebelumnya, dan menentukan persyaratan jaringan yang mendetail. JobScheduler kemudian mengelola pekerjaan sesuai dengan
status jaringan. Misalnya, saat jaringan memberi sinyal bahwa jaringan sedang padat, JobScheduler dapat menunda permintaan jaringan yang besar. Saat berada di jaringan tanpa kuota, JobScheduler dapat menjalankan tugas pengambilan data terlebih dahulu untuk meningkatkan pengalaman pengguna, seperti dengan mengambil data judul terlebih dahulu.
Saat menambahkan tugas, pastikan untuk menggunakan setEstimatedNetworkBytes(),
setPrefetch(),
dan setRequiredNetwork()
jika sesuai untuk membantu
JobScheduler menangani pekerjaan dengan benar. Saat tugas Anda dieksekusi,
pastikan untuk menggunakan objek Network
yang ditampilkan oleh
JobParameters.getNetwork().
Jika tidak, Anda akan secara implisit 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 (level API 27) untuk mempercepat machine learning di perangkat Android. Android 9 memperluas dan meningkatkan kualitas API, dengan menambahkan dukungan untuk sembilan operasi baru:
- Operasi matematika yang menangani setiap elemen:
- Operasi array:
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 yang levelnya lebih tinggi, 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 yang sama rendahnya seperti 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 diringkas di bagian berikut:
Konfirmasi Dilindungi oleh Android
Perangkat yang didukung dan 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 meminta mereka menyetujui pernyataan singkat. Pernyataan ini memungkinkan aplikasi menegaskan kembali bahwa pengguna ingin menyelesaikan transaksi 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 dengan kunci (HMAC). Setelah Android Keystore mengonfirmasi validitas pesan, aplikasi Anda dapat menggunakan kunci yang dihasilkan dari trustedConfirmationRequired di lingkungan eksekusi tepercaya (TEE) untuk menandatangani pesan yang disetujui pengguna. Tanda tangan tersebut menunjukkan, dengan keyakinan 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 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 mendapatkan panduan tentang cara menambahkan dukungan untuk Konfirmasi Dilindungi Android, lihat panduan Konfirmasi Dilindungi Android.
Dialog autentikasi biometrik terpadu
Di Android 9, sistem menyediakan dialog autentikasi biometrik atas nama aplikasi Anda. Fungsi ini menciptakan tampilan, nuansa, dan penempatan yang standar untuk dialog, sehingga memberi pengguna lebih banyak keyakinan bahwa mereka melakukan autentikasi terhadap pemeriksa kredensial biometrik tepercaya.
Jika aplikasi Anda menggunakan
FingerprintManager
untuk menampilkan dialog autentikasi sidik jari kepada pengguna, beralihlah ke penggunaan
BiometricPrompt
sebagai gantinya. BiometricPrompt mengandalkan sistem untuk menampilkan dialog autentikasi. Perilakunya juga berubah untuk menyesuaikan dengan jenis autentikasi biometrik yang telah dipilih pengguna.
Modul keamanan hardware
Perangkat yang didukung dan menjalankan Android 9 atau yang lebih tinggi yang diinstal dapat memiliki StrongBox KeyMint (sebelumnya Keymaster), implementasi HAL KeyMint (sebelumnya Keymaster) yang berada di 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 aplikasi tanpa izin.
Saat memeriksa kunci yang disimpan di StrongBox KeyMint, sistem akan menguatkan integritas kunci dengan Trusted Execution Environment (TEE).
Untuk mempelajari lebih lanjut cara menggunakan StrongBox KeyMint, lihat Modul Keamanan Hardware.
Mengimpor kunci aman ke Keystore
Android 9 memberikan keamanan dekripsi kunci tambahan dengan menambahkan kemampuan untuk mengimpor kunci terenkripsi dengan aman ke Keystore menggunakan format kunci yang dienkode dengan ASN.1. KeyMint kemudian mendekripsi kunci di 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 catatan bukti rotasi dalam blok penandatanganannya untuk setiap sertifikat penandatanganan. Kemampuan ini memungkinkan aplikasi Anda ditandatangani dengan sertifikat penandatanganan baru dengan menautkan sertifikat penandatanganan sebelumnya dari file APK ke sertifikat yang digunakan untuk menandatanganinya sekarang.
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 memerlukan layar untuk dibuka kuncinya sebelum mengizinkan
dekripsi data yang sedang dikirim atau disimpan menggunakan kunci yang ditentukan. Jenis kunci ini sangat cocok untuk mengenkripsi data sensitif yang akan disimpan di disk, seperti data kesehatan atau perusahaan. Bendera ini memberikan jaminan yang lebih tinggi kepada pengguna bahwa data tidak dapat didekripsi saat perangkat terkunci jika ponsel mereka hilang atau dicuri.
Untuk menjaga agar kunci tetap aman dari dekripsi saat perangkat terkunci, aktifkan tanda dengan meneruskan true ke metode setUnlockedDeviceRequired(). Setelah menyelesaikan langkah ini, saat layar pengguna dikunci, 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 Keymaster 4 mendukung Algoritma Enkripsi Data Tiga Kali, atau Triple DES. Jika aplikasi Anda beroperasi dengan sistem lama yang memerlukan Triple DES, gunakan jenis cipher ini saat mengenkripsi kredensial sensitif.
Untuk mempelajari lebih lanjut cara meningkatkan keamanan aplikasi Anda, lihat Keamanan untuk Developer Android.
Penghentian penggunaan WPS
Wi-Fi Protected Setup (WPS) tidak digunakan lagi karena alasan keamanan.
Backup Android
Android 9 menambahkan fungsi dan opsi developer baru yang terkait dengan pencadangan dan pemulihan. Detail tentang perubahan ini muncul di bagian berikut.
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:
- Pengguna telah mengaktifkan pencadangan menggunakan Android 9 atau yang lebih baru.
- Pengguna telah menetapkan kunci layar untuk perangkatnya yang memerlukan PIN, pola, atau sandi untuk membuka kunci.
Jika langkah privasi ini diaktifkan, PIN, pola, atau sandi perangkat diperlukan untuk memulihkan data dari cadangan yang dibuat oleh perangkat pengguna. Untuk mempelajari lebih lanjut teknologi di balik fitur ini, lihat laporan resmi Layanan Google Cloud Key Vault.
Menetapkan kondisi perangkat yang diperlukan untuk pencadangan
Jika data aplikasi Anda mencakup 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 lokal dari perangkat ke perangkat sedang berlangsung.
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 bagi 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 lainnya. Atribut ini dapat membantu pengguna yang memiliki gangguan penglihatan berpindah dengan cepat melalui teks di UI aplikasi Anda dan memungkinkan mereka membuat pilihan.
Misalnya, di aplikasi belanja, pembaca layar dapat membantu pengguna membuka langsung dari satu kategori penawaran ke kategori berikutnya, tanpa pembaca layar harus membaca semua item dalam satu kategori sebelum beralih ke kategori berikutnya.
Judul panel aksesibilitas
Di Android 8.1 (level API 27) dan yang lebih rendah, layanan aksesibilitas tidak selalu dapat menentukan kapan panel tertentu di layar diperbarui, seperti saat aktivitas menggantikan 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 terpisah, untuk panel ini. Jika panel memiliki judul panel aksesibilitas, layanan aksesibilitas menerima informasi yang lebih mendetail saat panel berubah. Kemampuan ini memungkinkan layanan memberikan informasi yang lebih terperinci kepada pengguna tentang apa yang berubah 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 heading logis, tetapkan atribut
android:accessibilityHeading
ke true untuk instance
View yang merepresentasikan heading tersebut. Dengan
menambahkan judul ini, Anda mengizinkan layanan aksesibilitas membantu pengguna menavigasi
langsung dari satu judul ke judul berikutnya. Layanan aksesibilitas apa pun 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 tampilan tersebut secara logis saling terkait.
Di Android 8.1 dan yang lebih rendah, 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 dapat difokuskan dengan cara yang
membuat navigasi keyboard menjadi lebih rumit.
Mulai Android 9, Anda dapat menggunakan atribut
android:screenReaderFocusable
sebagai pengganti atribut android:focusable dalam situasi saat
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 praktis
Android 9 menambahkan dukungan untuk melakukan tindakan praktis atas nama pengguna:
- Berinteraksi dengan tooltip
- Fitur yang ditambahkan dalam framework aksesibilitas memberi Anda akses ke
tooltip di UI aplikasi. Gunakan
getTooltipText()untuk membaca teks tooltip, dan gunakanACTION_SHOW_TOOLTIPdanACTION_HIDE_TOOLTIPuntuk menginstruksikan instanceViewagar menampilkan atau menyembunyikan tooltipnya. - Menambahkan tindakan global
- Android 9 memperkenalkan dukungan untuk dua tindakan perangkat tambahan di class
AccessibilityService. Layanan Anda dapat membantu pengguna mengunci perangkat mereka dan mengambil screenshot menggunakan tindakanGLOBAL_ACTION_LOCK_SCREENdanGLOBAL_ACTION_TAKE_SCREENSHOT.
Detail perubahan jendela
Android 9 mempermudah pelacakan update pada jendela aplikasi saat aplikasi
menggambar ulang beberapa jendela secara bersamaan. Saat peristiwa
TYPE_WINDOWS_CHANGED
terjadi, gunakan
getWindowChanges()
API untuk menentukan bagaimana jendela telah berubah. Selama update multi-window, setiap
jendela menghasilkan serangkaian 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
saat UI aplikasi diperbarui. Saat peristiwa
TYPE_WINDOW_STATE_CHANGED
terjadi, gunakan jenis yang ditampilkan oleh
getContentChangeTypes()
untuk menentukan cara jendela telah berubah. Misalnya, framework dapat mendeteksi saat panel memiliki judul baru, atau saat panel telah menghilang.
Rotasi
Untuk menghilangkan rotasi yang tidak disengaja, kami telah menambahkan mode yang menyematkan orientasi saat ini meskipun posisi perangkat berubah. Pengguna dapat memicu rotasi secara manual jika diperlukan dengan menekan tombol di kolom sistem.
Dampak kompatibilitas untuk aplikasi sebagian besar minimal. Namun, jika aplikasi Anda memiliki perilaku rotasi yang disesuaikan atau menggunakan setelan orientasi layar yang tidak biasa, Anda mungkin mengalami masalah yang sebelumnya tidak disadari, saat preferensi rotasi pengguna selalu disetel ke potret. Sebaiknya perhatikan perilaku rotasi di semua aktivitas utama aplikasi Anda dan pastikan semua setelan orientasi layar Anda masih memberikan pengalaman yang optimal.
Untuk mengetahui detail selengkapnya, lihat perubahan perilaku terkait.
Mode rotasi baru memungkinkan pengguna memicu rotasi secara manual saat diperlukan menggunakan tombol di kolom sistem.
Teks
Android 9 menghadirkan fitur terkait teks berikut ke platform:
Teks yang Sudah Dihitung: Class
PrecomputedTextmeningkatkan performa rendering teks dengan memungkinkan Anda menghitung dan meng-cache informasi yang diperlukan sebelumnya. Hal ini juga memungkinkan aplikasi Anda melakukan tata letak teks di luar thread utama.Pembesar: Class
Magnifieradalah widget platform yang menyediakan API pembesar, sehingga memungkinkan pengalaman fitur pembesar yang konsisten di semua aplikasi.Smart Linkify: Android 9 meningkatkan kualitas class
TextClassifier, yang memanfaatkan machine learning untuk mengidentifikasi beberapa entity dalam teks yang dipilih dan menyarankan tindakan. Misalnya,TextClassifierdapat memungkinkan aplikasi Anda mendeteksi bahwa pengguna telah memilih nomor telepon. Kemudian, aplikasi Anda dapat menyarankan agar pengguna melakukan panggilan telepon menggunakan nomor tersebut. Fitur diTextClassifiermenggantikan fungsi classLinkify.Tata Letak Teks: Beberapa metode dan atribut praktis mempermudah penerapan desain UI Anda. Untuk mengetahui detailnya, lihat dokumentasi referensi untuk
TextView.
Konversi file DEX ahead-of-time ART
Pada perangkat yang menjalankan Android 9 atau yang lebih tinggi, compiler ahead-of-time Android runtime (ART) mengoptimalkan lebih lanjut 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 terutama bermanfaat bagi perangkat kelas bawah dengan kecepatan I/O disk yang lebih lambat.
Pelacakan sistem di perangkat
Android 9 memungkinkan Anda merekam rekaman aktivitas sistem dari perangkat, lalu membagikan laporan rekaman ini kepada tim pengembangan Anda. Laporan ini mendukung beberapa format, termasuk HTML.
Dengan mengumpulkan rekaman aktivitas ini, Anda dapat merekam data pengaturan waktu yang terkait dengan proses dan thread aplikasi Anda serta melihat jenis status perangkat yang signifikan secara global lainnya.
Untuk mempelajari alat ini lebih lanjut, lihat Melakukan pelacakan sistem di perangkat.