Android 9 (API level 28) memperkenalkan fitur dan kemampuan baru yang hebat untuk pengguna dan pengembang. 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 melihat Perubahan Perilaku Android 9 yang perlu dipelajari mengenai area mana saja pada aplikasi Anda yang mungkin terpengaruh oleh perubahan platform.
Pemosisian dalam ruangan dengan Wi-Fi RTT
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 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 spesial untuk produk ini?").
Lihat Wi-Fi RTT API yang digunakan di Aplikasi demo Android WifiRttScan.
Untuk informasi selengkapnya, lihat Lokasi Wi-Fi: rentang jarak dengan RTT.
Dukungan potongan layar
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 potongan ini, gunakan
getDisplayCutout()
.
Atribut tata letak jendela baru,
layoutInDisplayCutoutMode
,
memungkinkan aplikasi Anda untuk meletakkan kontennya di sekitar potongan perangkat. Anda dapat mengatur
atribut ini ke salah satu nilai berikut:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Anda dapat menyimulasikan potongan layar di perangkat atau emulator apa pun yang menjalankan Android 9 sebagai berikut:
- Aktifkan opsi developer.
- Di layar Opsi developer, scroll ke bawah ke bagian Gambar lalu pilih Simulasikan tampilan dengan potongan.
- 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.
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, sepertiaddMessage()
, sekarang manfaatkan classPerson
, bukanCharSequence
. ClassPerson
juga 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 untuk membuatPerson
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.Identifikasi apakah suatu percakapan merupakan 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, sehingga Anda dapat membuat saluran yang dapat disesuaikan pengguna untuk setiap jenis notifikasi yang ingin Anda tampilkan. 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 sekarang mengirimkan intent siaran saat status pemblokiran saluran notifikasi dan grup saluran berubah. Aplikasi yang memiliki saluran atau grup yang diblokir bisa memproses intent ini dan bereaksi sesuai dengan hal tersebut. Untuk informasi selengkapnya tentang tindakan dan tambahan intent ini, mengacu pada daftar konstanta terupdate dalam
NotificationManager
alamat IP internal. Untuk informasi tentang cara bereaksi terhadap intent siaran, lihat Siaran.NotificationManager.Policy
memiliki tiga kategori prioritas Do-Not-Disturb baru:PRIORITY_CATEGORY_ALARMS
memprioritaskan alarm.PRIORITY_CATEGORY_MEDIA
memprioritaskan suara dari sumber media, seperti media dan navigasi suara.PRIORITY_CATEGORY_SYSTEM
akan memprioritaskan suara sistem.
NotificationManager.Policy
juga memiliki tujuh konstanta Do-Not-Disturb baru yang Anda yang dapat digunakan untuk menekan gangguan visual:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
mencegah notifikasi meluncurkan aktivitas layar penuh.SUPPRESSED_EFFECT_LIGHTS
memblokir lampu notifikasi.SUPPRESSED_EFFECT_PEEK
mencegah notifikasi agar tidak meluncur sebentar ke tampilan ("mengintip").SUPPRESSED_EFFECT_STATUS_BAR
mencegah notifikasi muncul pada status bar di perangkat yang mendukung status bar.SUPPRESSED_EFFECT_BADGE
memblokir badge di perangkat yang mendukung pemberian badge. Untuk informasi selengkapnya, lihat Mengubah badge notifikasi.SUPPRESSED_EFFECT_AMBIENT
memblokir notifikasi di perangkat yang mendukung tampilan standby.SUPPRESSED_EFFECT_NOTIFICATION_LIST
mencegah notifikasi muncul di tampilan daftar pada perangkat yang mendukung tampilan daftar, seperti menu notifikasi atau layar kunci.
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.
Peningkatan lain pada kamera mencakup Sesi tambahan parameter yang membantu mengurangi penundaan selama pengambilan gambar awal, dan berbagi permukaan klien kamera menangani berbagai kasus penggunaan tanpa perlu 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, multi-kamera
API
mendukung kamera monokrom untuk perangkat dengan
FULL
atau
Kemampuan LIMITED
.
Output monokrom dicapai melalui
YUV_420_888
format 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 buffering byte, sebuah file,
atau URI. Untuk mendekode gambar, panggil
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
panggilan
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
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 dalam
setTargetSize()
Anda juga bisa menskalakan gambar menggunakan ukuran contoh. Teruskan ukuran sampel langsung kesetTargetSampleSize()
- Untuk memangkas gambar dalam rentang gambar yang diskalakan, panggil
setCrop()
- Untuk membuat bitmap yang dapat berubah, teruskan
true
kesetMutableRequired()
.
ImageDecoder
juga memungkinkan Anda menambahkan efek yang rumit dan disesuaikan ke gambar
seperti sudut membulat atau
topeng lingkaran. Gunakan
setPostProcessor()
dengan instance
PostProcessor
untuk menjalankan perintah menggambar apa pun yang diinginkan.
Animasi
Android 9 memperkenalkan
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 mengubah 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. Sampel gambar HEIF didukung dalam
MediaMuxer
dan MediaExtractor
Google Cloud Platform. Dengan dukungan platform di perangkat Android 9, mengirim dan
menggunakan image HEIF dari server backend. 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 pada
Class MediaDRM
untuk mendapatkan metrik, HDCP
tingkat keamanan, dan jumlah sesi, serta untuk menambahkan kontrol
tingkat keamanan dan
perhentian yang 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 {i>stream <i}AAudio dengan submix yang
dapat menyertakan efek. Gunakan
AudioEffect
API untuk mengontrol
yang dihasilkan.
Android 9 memperkenalkan
AudioEffect
API untuk
pemrosesan dinamis.
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, ketika jaringan memberikan sinyal
bahwa jaringan sedang padat,
JobScheduler
mungkin menunda permintaan jaringan yang berukuran besar. Saat berada di
jaringan tidak berbayar, JobScheduler
dapat menjalankan tugas pengambilan data
meningkatkan pengalaman pengguna, seperti dengan mengambil data judul utama.
Saat menambahkan tugas, pastikan menggunakan setEstimatedNetworkBytes()
,
setPrefetch()
,
dan setRequiredNetwork()
jika diperlukan untuk membantu
JobScheduler
menangani pekerjaan dengan baik. Ketika tugas Anda dijalankan,
pastikan untuk menggunakan objek Network
dikembalikan 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:
- Operasi matematis yang menangani setiap elemen:
- Operasi array:
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 IEEE 754 16-bit floating point
format font.
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 bagian berikut meringkas:
Konfirmasi Dilindungi oleh Android
Perangkat yang didukung dan menjalankan Android 9 atau yang lebih tinggi memberi Anda kemampuan 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 jaminan kerahasiaan lebih dari sekadar yang ditawarkan platform Android. Secara khusus, jangan gunakan alur kerja ini untuk menampilkan informasi sensitif yang biasanya tidak akan Anda tampilkan di perangkat pengguna.
Guna mengetahui panduan menambahkan dukungan untuk Konfirmasi Dilindungi oleh Android, lihat Dilindungi Android Konfirmasi kami.
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 autentikasi
dialog. Model ini juga mengubah perilakunya untuk beradaptasi dengan jenis biometrik
autentikasi 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 mendukung integritas kunci dengan Trusted Execution Environment (TEE).
Untuk mempelajari lebih lanjut cara menggunakan Strongbox Keymaster, lihat Keamanan Hardware Modul.
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 lebih lanjut dengan 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 penandatanganan CA {i>root<i}. 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 untuk dibuka kuncinya sebelum mengizinkan
dekripsi apa pun yang sedang beroperasi atau disimpan
menggunakan kunci yang ditentukan. Jenis-jenis ini
kunci sangat cocok untuk mengenkripsi data
sensitif untuk disimpan di {i>disk<i}, seperti
atau perusahaan. Tanda tersebut 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 terkunci 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 memiliki interoperabilitas dengan yang membutuhkan Triple DES, menggunakan jenis penyandian ini saat mengenkripsi dan kredensial sensitif.
Untuk mempelajari lebih lanjut cara meningkatkan keamanan aplikasi Anda, lihat Keamanan untuk Android Developer.
Penghentian WPS
Wi-Fi Protected Setup (WPS) tidak digunakan lagi karena alasan keamanan.
Cadangan Android
Android 9 menambahkan fungsionalitas dan opsi developer baru terkait untuk mencadangkan dan memulihkan. 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 saat hal berikut kondisi terpenuhi:
- Pengguna telah mengaktifkan pencadangan menggunakan Android 9 atau yang lebih tinggi.
- Pengguna telah menyetel layar kunci perangkat mereka yang membutuhkan PIN, pola, atau {i>password<i} untuk membuka kunci.
Jika langkah privasi ini diaktifkan, PIN, pola, atau sandi perangkat akan diaktifkan untuk memulihkan data dari cadangan yang dibuat oleh perangkat pengguna. Untuk mempelajari informasi 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 menyertakan informasi atau preferensi sensitif, Android 9 memberi Anda kemampuan untuk menentukan perangkat kondisi di mana data aplikasi Anda disertakan dalam cadangan pengguna, seperti saat sisi klien enkripsi diaktifkan atau transfer antar-perangkat lokal terjadi.
Untuk mempelajari lebih lanjut cara mencadangkan data di perangkat Android, lihat Data Ringkasan Pencadangan.
Aksesibilitas
Android 9 memperkenalkan peningkatan pada aksesibilitas yang membuatnya lebih mudah untuk memberikan 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 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, di aplikasi belanja, {i>screen reader<i} dapat membantu pengguna untuk menavigasi secara langsung dari satu kategori transaksi ke kategori berikutnya, tanpa {i>screen reader<i} harus membaca semua item dalam suatu kategori sebelum melanjutkan ke yang 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 kapan aktivitas mengganti satu fragmen dengan fragmen lainnya. 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 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 menetapkan judul panel, gunakan atribut
android:accessibilityPaneTitle
. Anda juga dapat memperbarui judul panel UI yang diganti di
runtime menggunakan setAccessibilityPaneTitle()
.
Misalnya, Anda dapat memberikan judul untuk area konten
Objek Fragment
.
Navigasi berbasis arah
Jika aplikasi Anda menampilkan konten tekstual yang menyertakan judul logis, setel
android:accessibilityHeading
ke true
untuk instance
View
yang mewakili judul tersebut. Menurut
menambahkan judul ini, Anda mengizinkan layanan
aksesibilitas untuk membantu pengguna menavigasi
langsung dari satu {i>heading<i} ke {i>heading<i} 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 lama, Anda harus menandai setiap objek View
dalam
ViewGroup
sebagai tidak dapat difokuskan dan ViewGroup
itu sendiri sebagai yang dapat difokuskan. Ini
pengaturan menyebabkan beberapa instance View
ditandai dapat difokuskan dengan cara
membuat navigasi {i>keyboard<i}
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. {i>Screen reader<i}
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 di framework aksesibilitas memberi Anda akses ke
tooltip di UI aplikasi. Gunakan
getTooltipText()
untuk membaca teks tooltip, dan menggunakanACTION_SHOW_TOOLTIP
danACTION_HIDE_TOOLTIP
untuk menginstruksikan instanceView
agar menampilkan atau menyembunyikan tooltip. - Tindakan global yang ditambahkan
- Android 9 memperkenalkan dukungan untuk dua tindakan perangkat tambahan di
AccessibilityService
. Layanan Anda dapat membantu pengguna mengunci perangkat dan mengambil screenshot menggunakanGLOBAL_ACTION_LOCK_SCREEN
danGLOBAL_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 bagaimana jendela berubah. Selama update multi-aplikasi, setiap
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. Ketika seorang
TYPE_WINDOW_STATE_CHANGED
yang terjadi, gunakan jenis yang dikembalikan oleh
getContentChangeTypes()
untuk menentukan bagaimana jendela berubah. Misalnya, kerangka kerja dapat
mendeteksi saat panel memiliki judul baru, atau saat panel menghilang.
Rotasi
Untuk mencegah rotasi yang tidak disengaja, kami telah menambahkan mode yang menyematkan arus orientasi 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 bahwa semua setelan orientasi layar Anda masih menyediakan pengalaman pengguna yang optimal.
Untuk detail selengkapnya, lihat perilaku terkait perubahan.
Teks
Android 9 menghadirkan fitur terkait teks berikut ke 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 menonaktifkan tata letak teks di thread utama.Pembesar: Class
Magnifier
adalah widget platform yang menyediakan Magnizer API, sehingga memungkinkan pengalaman fitur pembesar di semua aplikasi.Smart Linkify: Android 9 meningkatkan Class
TextClassifier
, yang memanfaatkan machine learning untuk mengidentifikasi beberapa entitas di teks terpilih 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 diTextClassifier
mengganti fungsi classLinkify
.Tata Letak Teks: Beberapa atribut dan metode praktis memudahkan menerapkan desain UI Anda. Untuk detailnya, lihat dokumentasi referensi untuk
TextView
Konversi file DEX sebelum ART
Pada perangkat yang menjalankan Android 9 atau yang lebih tinggi, runtime Android Kompilator di muka (ART) semakin mengoptimalkan Dalvik Executable yang dikompresi dengan mengonversi file DEX di paket aplikasi menjadi representasi yang ringkas. Perubahan ini memungkinkan aplikasi Anda untuk mulai lebih cepat dan menggunakan lebih sedikit ruang {i>disk <i}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 pelacakan sistem dari perangkat, kemudian bagikan laporan dari rekaman ini dengan tim pengembangan Anda. Laporan ini mendukung berbagai 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.