Android 11 memperkenalkan fitur dan API baru yang hebat untuk para developer. Bagian di bawah ini membantu Anda mempelajari fitur-fitur yang tersedia untuk aplikasi Anda, serta mulai menggunakan API yang terkait.
Untuk melihat daftar mendetail tentang API yang baru, diubah, dan dihapus, baca laporan perbedaan API. Untuk mengetahui detail tentang API baru, kunjungi referensi API Android — API baru ditandai agar lebih mudah dilihat. Selain itu, untuk mempelajari area mana saja dalam aplikasi Anda yang dapat terpengaruh oleh perubahan, baca tentang perubahan perilaku Android 11 untuk aplikasi yang menargetkan Android R dan untuk semua aplikasi), serta perubahan privasi.
Pengalaman baru
Kontrol perangkat
Android 11 menyertakan ControlsProviderService
API baru
yang dapat Anda gunakan untuk menunjukkan kontrol bagi perangkat eksternal yang terhubung. Kontrol ini
ditampilkan pada Kontrol perangkat dalam menu daya Android. Untuk mengetahui informasi
selengkapnya, baca Mengontrol perangkat eksternal.
Kontrol Media
Android 11 memperbarui cara kontrol media ditampilkan. Kontrol media ditampilkan di dekat setelan cepat. Sesi dari beberapa aplikasi disusun dalam carousel yang dapat digeser, mencakup streaming yang diputar secara lokal di ponsel, streaming jarak jauh seperti yang terdeteksi pada perangkat eksternal atau sesi transmisi, dan sesi sebelumnya yang dapat dilanjutkan sesuai urutan pemutaran terakhirnya.
Pengguna dapat memulai ulang sesi sebelumnya dari carousel tanpa harus memulai aplikasi. Saat pemutaran dimulai, pengguna berinteraksi dengan kontrol media seperti biasa.
Untuk mengetahui informasi selengkapnya, baca kontrol media.
Layar
Dukungan yang lebih baik untuk tampilan waterfall
Android 11 menyediakan beberapa API untuk mendukung tampilan waterfall,
yaitu tampilan yang
melengkung di bagian tepi perangkat. Tampilan ini dianggap sebagai varian
tampilan yang memiliki potongan layar. Metode
DisplayCutout
.getSafeInset…()
yang ada kini akan menampilkan inset yang aman untuk menghindari area lengkungan serta potongan.
Untuk merender konten aplikasi di area lengkungan, lakukan hal berikut:
Panggil
DisplayCutout.getWaterfallInsets()
untuk mendapatkan dimensi inset waterfall yang tepat.Tetapkan atribut tata letak jendela
layoutInDisplayCutoutMode
keLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
agar jendela dapat diperluas ke area potongan dan lengkungan di seluruh bagian tepi layar. Anda harus memastikan tidak ada konten penting di area potongan atau lengkungan tersebut.
Sensor sudut engsel dan perangkat foldable
Di Android 11, aplikasi yang berjalan di
perangkat dengan konfigurasi layar berbasis engsel kini dapat
menentukan sudut engsel melalui sebuah sensor baru
dengan TYPE_HINGE_ANGLE
,
serta
SensorEvent
baru yang dapat memantau
sudut engsel dan menyediakan pengukuran dalam derajat antara dua
bagian perangkat yang saling menempel. Anda dapat menggunakan pengukuran mentah ini untuk menjalankan
animasi terperinci saat pengguna mengoperasikan perangkat.
Lihat Perangkat foldable.
Percakapan
Peningkatan untuk percakapan
Android 11 melakukan sejumlah peningkatan pada penanganan percakapan. Percakapan adalah komunikasi real-time dua arah yang dilakukan antara dua orang atau lebih. Percakapan ini diberi perhatian khusus, dan pengguna memiliki beberapa opsi baru tentang cara berinteraksi dengannya.
Untuk mengetahui informasi selengkapnya tentang percakapan dan cara aplikasi Anda dapat mendukungnya, lihat Pengguna dan percakapan.
Balon Chat
Balon kini tersedia bagi developer untuk membantu menampilkan percakapan di seluruh sistem. Balon adalah fitur eksperimental di Android 10 yang diaktifkan melalui opsi developer; di Android 11, tindakan ini tidak lagi diperlukan.
Jika aplikasi menargetkan Android 11 (API level 30) atau versi yang lebih tinggi, notifikasinya tidak akan ditampilkan sebagai balon kecuali memenuhi persyaratan percakapan baru. Secara khusus, notifikasi harus dikaitkan dengan pintasan.
Sebelum Android 11, jika ingin notifikasi ditampilkan dalam balon, Anda harus secara eksplisit menentukan bahwa notifikasi disetel untuk selalu diluncurkan dalam mode UI dokumen. Mulai Android 11, Anda tidak perlu lagi membuat setelan tersebut secara eksplisit; jika notifikasi ditampilkan dalam balon, platform akan secara otomatis menyetel notifikasi agar selalu diluncurkan dalam mode UI dokumen.
Ada sejumlah peningkatan pada performa balon, dan pengguna dapat mengaktifkan serta menonaktifkan balon secara lebih fleksibel dari setiap aplikasi. Bagi developer yang menerapkan dukungan eksperimental, ada beberapa perubahan pada API di Android 11:
- Konstruktor
BubbleMetadata.Builder()
tanpa parameter sekarang tidak digunakan lagi. Sebagai gantinya, gunakan salah satu dari dua konstruktor baru yang tersedia, yaituBubbleMetadata.Builder(PendingIntent, Icon)
atauBubbleMetadata.Builder(String)
. - Buat
BubbleMetadata
dari ID pintasan dengan memanggilBubbleMetadata.Builder(String)
. String yang diteruskan harus cocok dengan ID pintasan yang diberikan untukNotification.Builder
. - Buat ikon balon dengan
Icon.createWithContentUri()
, atau dengan metodecreateWithAdaptiveBitmapContentUri()
yang baru.
Indikator visual 5G
Untuk informasi tentang cara menampilkan indikator 5G di perangkat pengguna, lihat Memberi tahu pengguna saat mereka menggunakan 5G.
Privasi
Android 11 memperkenalkan banyak perubahan dan pembatasan untuk meningkatkan privasi pengguna. Untuk mempelajari lebih lanjut, lihat halaman Privasi.
Keamanan
Pembaruan pada autentikasi biometrik
Untuk membantu Anda mengontrol tingkat keamanan data aplikasi, Android 11 memberikan beberapa peningkatan pada autentikasi biometrik. Perubahan ini juga muncul di library biometrik Jetpack.
Jenis autentikasi
Android 11 memperkenalkan
BiometricManager.Authenticators
antarmuka yang dapat Anda gunakan untuk mendeklarasikan jenis autentikasi yang didukung
aplikasi Anda.
Tentukan jenis autentikasi yang digunakan
Setelah pengguna melakukan autentikasi, Anda dapat memeriksa apakah pengguna tersebut diautentikasi menggunakan
kredensial perangkat atau kredensial biometrik dengan memanggil
getAuthenticationType()
.
Dukungan tambahan untuk kunci autentikasi per penggunaan
Android 11 memberikan lebih banyak dukungan untuk autentikasi yang menggunakan kunci autentikasi per pengguna.
Metode yang tidak digunakan lagi
Android 11 tidak lagi menggunakan metode berikut:
- Metode
setDeviceCredentialAllowed()
. - Metode
setUserAuthenticationValidityDurationSeconds()
. - Versi overload
canAuthenticate()
yang tidak menggunakan argumen apa pun.
Berbagi set data besar dengan aman
Dalam beberapa situasi, seperti yang melibatkan machine learning atau pemutaran media, aplikasi Anda mungkin perlu menggunakan set data besar yang sama dengan aplikasi lain. Pada versi Android sebelumnya, aplikasi Anda dan aplikasi lain masing-masing harus mendownload salinan set data yang sama secara terpisah.
Untuk membantu mengurangi redundansi data, baik pada jaringan maupun disk, Android 11 memungkinkan set data besar ini disimpan dalam cache di perangkat menggunakan blob data bersama. Untuk mempelajari lebih lanjut tentang berbagi set data, baca panduan mendalam tentang berbagi set data besar.
Menjalankan enkripsi berbasis file setelah OTA dimulai ulang tanpa kredensial pengguna
Setelah perangkat menyelesaikan update OTA dan dimulai ulang, kunci Enkripsi Kredensial (CE) yang terletak di penyimpanan yang dilindungi kredensial akan langsung tersedia untuk operasi File-Based Encryption (FBE). Artinya, setelah update OTA, aplikasi Anda dapat melanjutkan operasi yang memerlukan kunci CE sebelum pengguna memasukkan PIN, pola, atau sandi.
Performa dan kualitas
Proses debug nirkabel
Android 11 mendukung deployment dan proses debug aplikasi secara nirkabel dari komputer melalui Android Debug Bridge (adb). Misalnya, Anda dapat men-deploy aplikasi yang dapat di-debug ke beberapa perangkat jarak jauh, tanpa harus menghubungkan perangkat secara langsung melalui USB dan mengalami masalah koneksi USB umum, seperti penginstalan driver. Untuk informasi selengkapnya, lihat Menjalankan aplikasi di perangkat hardware.
Penginstalan APK Inkremental melalui ADB
Memerlukan waktu yang lama untuk menginstal APK berukuran besar (2 GB+) di perangkat, meskipun
perubahan yang dilakukan pada aplikasi hanya sedikit. Penginstalan APK Inkremental
melalui ADB (Android Debug Bridge) mempercepat proses ini dengan menginstal data APK yang cukup untuk meluncurkan
aplikasi, lalu men-streaming sisanya di latar belakang. adb install
akan
menggunakan fitur ini secara otomatis jika didukung oleh perangkat dan Anda sudah menginstal versi
terbaru SDK Platform-Tools. Jika
tidak didukung, metode penginstalan default akan digunakan tanpa pemberitahuan.
Gunakan perintah adb berikut ini untuk menggunakan fitur tersebut. Jika perangkat tidak mendukung penginstalan inkremental, perintah akan gagal dan menampilkan penjelasan yang panjang.
adb install --incremental
Sebelum menjalankan penginstalan APK inkremental melalui ADB, Anda harus menandatangani APK dan membuat file Skema Tanda Tangan APK v4. File tanda tangan v4 harus diletakkan bersama APK agar fitur ini dapat berfungsi.
Deteksi error menggunakan pengalokasi memori native
GWP-ASan adalah fitur pengalokasi memori native yang membantu menemukan bug use-after-free dan heap-buffer-overflow. Anda dapat mengaktifkan fitur ini secara global atau untuk subproses tertentu aplikasi Anda. Untuk mempelajari lebih lanjut, baca Panduan GWP-Asan.
Neural Networks API 1.3
Android 11 memperluas dan meningkatkan Neural Networks API (NNAPI).
Operasi baru
NNAPI 1.3 memperkenalkan jenis operand baru, TENSOR_QUANT8_ASYMM_SIGNED
, untuk
mendukung skema kuantisasi baru TensorFlow
Lite.
Selain itu, NNAPI 1.3 juga memperkenalkan operasi baru berikut:
QUANTIZED_LSTM
IF
WHILE
ELU
HARD_SWISH
FILL
RANK
Kontrol ML baru
NNAPI 1.3 memperkenalkan kontrol baru untuk membantu machine learning berjalan lancar:
QoS API: Quality of Service API yang baru menyertakan dukungan untuk penetapan prioritas dan batas waktu tugas di NNAPI dengan fungsi baru berikut:
Input/output domain memori: NNAPI 1.3 menyertakan dukungan untuk domain memori sebagai input dan output pada eksekusi. Tindakan ini akan menghapus salinan data yang sama yang tidak diperlukan di antara beberapa komponen sistem, sehingga meningkatkan performa waktu proses jaringan neural Android. Fitur ini menambahkan sekumpulan API NDK baru untuk digunakan dengan objek
ANeuralNetworksMemoryDesc
danANeuralNetworkMemory
, termasuk fungsi berikut:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
Untuk mempelajari lebih lanjut, lihat contoh domain memori jaringan neural.
API dependensi dan dukungan fence sinkronisasi: NNAPI 1.3 menyertakan dukungan untuk komputasi asinkron dengan dependensi, memungkinkan pengurangan overhead secara signifikan saat memanggil model berantai kecil. Fitur ini menambahkan fungsi baru berikut:
Alur kontrol: NNAPI 1.3 menyertakan dukungan untuk alur kontrol umum dengan operasi grafik baru
ANEURALNETWORKS_IF
danANEURALNETWORKS_WHILE
, yang menerima model lain sebagai argumen menggunakan jenis operandANEURALNETWORKS_MODEL
yang baru. Selain itu, fitur ini juga menambahkan fungsi baru berikut:
NDK Thermal API
Saat suhu perangkat meningkat, fungsi CPU dan/atau GPU mungkin akan dibatasi, dan hal ini dapat memengaruhi aplikasi secara tidak terduga. Aplikasi atau game yang memiliki grafik kompleks, komputasi rumit, atau aktivitas jaringan berkelanjutan lebih berpotensi mengalami masalah.
Gunakan NDK Thermal API di Android 11 untuk memantau perubahan suhu pada perangkat, kemudian lakukan tindakan untuk mempertahankan penggunaan daya yang lebih rendah dan suhu perangkat yang lebih dingin. API ini mirip dengan Java Thermal API; Anda dapat menggunakannya untuk menerima notifikasi terkait perubahan status panas atau untuk menyelidiki status terkini secara langsung.
Teks dan input
Transisi IME yang ditingkatkan
Android 11 memperkenalkan API baru untuk meningkatkan transisi bagi editor metode input (IME), seperti keyboard virtual. API ini mempermudah penyesuaian konten aplikasi dalam sinkronisasi dengan ditampilkan dan disembunyikannya IME, serta dengan elemen lain seperti status bar dan menu navigasi.
Untuk menampilkan IME saat fokus diarahkan ke EditText
, panggil
view.getInsetsController().show(Type.ime())
.
(Anda dapat memanggil metode ini pada tampilan mana pun dalam
hierarki yang sama dengan EditText
yang difokuskan, dan tidak perlu memanggilnya
di EditText
secara spesifik.) Untuk menyembunyikan IME, panggil
view.getInsetsController().hide(Type.ime())
.
Anda dapat memastikan apakah IME saat ini terlihat dengan memanggil
view.getRootWindowInsets().isVisible(Type.ime())
.
Untuk menyinkronkan tampilan aplikasi dengan ditampilkan dan disembunyikannya IME, tetapkan pemroses pada tampilan dengan memberikan WindowInsetsAnimation.Callback
ke View.setWindowInsetsAnimationCallback()
.
(Anda dapat menetapkan pemroses ini pada tampilan apa pun, tidak hanya pada EditText
.)
IME akan memanggil metode
onPrepare()
pemroses, lalu memanggil
onStart()
di awal transisi. Kemudian, IME akan memanggil
onProgress()
pada setiap progres dalam transisi. Setelah transisi selesai, IME akan memanggil
onEnd()
.
Pada tahap mana pun dalam transisi, Anda dapat mengetahui progres yang telah dilalui dengan memanggil
WindowInsetsAnimation.getFraction()
.
Untuk melihat contoh penggunaan API ini, lihat contoh kode WindowInsetsAnimation yang baru
Mengontrol animasi IME
Anda juga dapat mengontrol animasi IME, atau animasi kolom sistem
lain seperti menu navigasi. Untuk melakukannya, panggil
setOnApplyWindowInsetsListener()
terlebih dahulu untuk menetapkan pemroses baru bagi perubahan inset jendela:
Kotlin
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
Java
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
Untuk memindahkan IME atau kolom sistem lainnya, panggil metode
controlWindowInsetsAnimation()
pengontrol:
Kotlin
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
Java
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
Update pada library ICU
Android 11 memperbarui paket android.icu
untuk menggunakan versi 66
library ICU, dari yang sebelumnya menggunakan versi
63 di Android 10. Versi library baru ini menyertakan data lokal CLDR terbaru
dan sejumlah penyempurnaan untuk dukungan internasionalisasi di Android.
Perubahan penting pada versi library baru ini meliputi:
- Berbagai API pemformatan kini mendukung jenis objek hasil baru yang memperluas
FormattedValue
. LocaleMatcher
API disempurnakan dengan class builder, dukungan untuk jenisjava.util.Locale
, dan class hasil yang menampilkan data tambahan tentang kecocokan.- Unicode 13 kini didukung.
Media
Mengalokasikan buffer MediaCodec
Android 11 menyertakan MediaCodec
API baru yang memperluas
kontrol aplikasi saat mengalokasikan buffer input dan output. API ini memungkinkan
aplikasi Anda mengelola memori secara lebih efisien.
Class baru:
Metode baru:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
Selain itu, perilaku dua metode dalam MediaCodec.Callback()
telah berubah:
onInputBufferAvailable()
- Bukannya memanggil
MediaCodec.getInputBuffer()
danMediaCodec.queueInputBuffer()
dengan indeks, jika dikonfigurasikan untuk menggunakan Block Model API, aplikasi kini akan menggunakanMediaCodec.getQueueRequest
dengan indeks, menambahkan LinearBlock/HardwareBuffer ke slot. onOutputBufferAvailable()
- Bukannya memanggil
MediaCodec.getOutputBuffer()
dengan indeks, aplikasi kini dapat menggunakanMediaCodec.getOutputFrame()
dengan indeks untuk mendapatkan objekOutputFrame
dengan informasi selengkapnya dan buffer LinearBlock/HardwareBuffer.
Decoding latensi rendah di MediaCodec
Android 11 menyempurnakan
MediaCodec
untuk mendukung decoding latensi rendah bagi game dan aplikasi real-time lainnya. Anda dapat
memastikan apakah suatu codec mendukung decoding latensi rendah dengan meneruskan
FEATURE_LowLatency
ke
MediaCodecInfo.CodecCapabilities.isFeatureSupported()
.
Untuk mengaktifkan atau menonaktifkan decoding latensi rendah, lakukan salah satu hal berikut:
- Tetapkan kunci baru
KEY_LOW_LATENCY
ke 0 atau 1 menggunakanMediaCodec.configure()
. - Tetapkan kunci parameter baru
PARAMETER_KEY_LOW_LATENCY
ke 0 atau 1 menggunakanMediaCodec.setParameters()
.
Fungsi AAudio baru: AAudioStream_release()
Fungsi
AAudioStream_close()
melepaskan dan menutup streaming audio pada saat yang sama. Hal ini dapat berbahaya. Jika
proses lain mencoba mengakses streaming setelah ditutup, proses
akan mengalami error.
Fungsi
AAudioStream_release()
yang baru akan melepas streaming, tetapi tidak menutupnya. Fungsi ini akan mengosongkan resource dan membiarkan
streaming dalam status yang diketahui. Objek akan tetap ada hingga Anda memanggil
AAudioStream_close()
.
MediaParser API
MediaParser adalah API tingkat rendah baru untuk ekstraksi media. API ini lebih fleksibel dibanding MediaExtractor, dan memberikan kontrol tambahan atas fungsionalitas ekstraksi media.
Merekam audio dari perangkat USB
Jika aplikasi yang tidak memiliki izin RECORD_AUDIO
menggunakan UsbManager
untuk meminta akses langsung ke perangkat audio USB dengan kemampuan perekaman
audio (seperti headset USB), akan muncul pesan peringatan baru yang meminta pengguna untuk
mengonfirmasi izin penggunaan perangkat. Sistem akan mengabaikan opsi “selalu
gunakan” sehingga pengguna harus mengonfirmasi peringatan dan memberikan izin setiap
kali aplikasi meminta akses.
Untuk menghindari perilaku ini, aplikasi Anda harus meminta izin RECORD_AUDIO
.
Akses mikrofon serentak
Android 11 menambahkan metode baru ke API AudioRecord
, MediaRecorder
,
dan AAudioStream
. Metode ini mengaktifkan dan menonaktifkan kemampuan untuk merekam secara serentak,
terlepas dari kasus penggunaan yang dipilih. Lihat Berbagi Input Audio.
Pengalih output
Android 11 menerapkan perilaku baru untuk aplikasi yang menggunakan cast dan mediarouter API.
Selain mengakses opsi transmisi dari dalam aplikasi, opsi pengalihan juga muncul di pemutar media sistem. Hal ini membantu pengguna beralih ke perangkat lain tanpa masalah dengan konteks menonton dan mendengarkan yang berubah, seperti menonton video di dapur dibanding menggunakan ponsel, atau mendengarkan audio di ponsel atau mobil. Lihat pengalih output.
Konektivitas
Penyempurnaan Passpoint Wi-Fi
Untuk informasi tentang kemampuan Passpoint yang ditambahkan di Android 11, lihat Passpoint.
Wi-Fi Suggestion API diperluas
Android 11 memperluas Wi-Fi Suggestion API untuk meningkatkan kemampuan pengelolaan jaringan aplikasi Anda, termasuk:
- Aplikasi pengelolaan konektivitas dapat mengelola jaringannya sendiri dengan mengizinkan permintaan pemutusan sambungan.
- Jaringan Passpoint diintegrasikan ke dalam Suggestion API dan dapat disarankan kepada pengguna.
- Analytics API memungkinkan Anda mendapatkan informasi tentang kualitas jaringan.
Update CallScreeningService
Mulai di Android 11, CallScreeningService dapat meminta informasi tentang status verifikasi (verstat) STIR/SHAKEN untuk panggilan masuk. Informasi ini disediakan sebagai bagian dari detail panggilan untuk panggilan masuk.
Jika CallScreeningService
memiliki
izin READ_CONTACTS
,
aplikasi akan diberi tahu saat ada panggilan masuk dari, atau
panggilan keluar ke, sebuah nomor dalam kontak pengguna.
Untuk mengetahui informasi selengkapnya, lihat Mencegah spoofing ID pemanggil.
Update untuk Open Mobile API
Untuk informasi tentang dukungan OMAPI di Android 11 dan yang lebih baru, lihat Dukungan pembaca Open Mobile API.
VPN berperforma tinggi
Aplikasi yang menargetkan API level 30 dan yang lebih tinggi, atau yang berjalan di perangkat yang diluncurkan pada API level 29 dan yang lebih tinggi, dapat menerapkan IKEv2/IPsec pada VPN untuk VPN berbasis aplikasi atau yang dikonfigurasi pengguna.
VPN berjalan secara native pada sistem operasi, menyederhanakan kode yang diperlukan untuk membuat koneksi VPN IKEv2/IPsec di aplikasi.
Kontrol akses jaringan per proses
Untuk informasi tentang cara mengaktifkan akses jaringan per proses, lihat Mengelola penggunaan jaringan.
Mengizinkan beberapa konfigurasi Passpoint yang terinstal dengan FQDN yang sama
Mulai di Android 11, Anda dapat menggunakan
PasspointConfiguration.getUniqueId()
untuk mendapatkan ID unik bagi objek PasspointConfiguration
, yang memungkinkan
pengguna aplikasi Anda menginstal beberapa profil dengan nama domain yang
sepenuhnya memenuhi syarat (FQDN).
Fungsionalitas ini berguna saat operator men-deploy lebih dari satu kombinasi Kode Negara Seluler (MCC) dan Kode Jaringan Seluler (MNC) di jaringannya, tetapi hanya memiliki satu FQDN. Pada Android 11 dan yang lebih tinggi, Anda dapat menginstal lebih dari satu profil dengan FQDN yang sama yang akan mencocokkan jaringan sebagai penyedia Utama saat pengguna menginstal SIM dengan MCC atau MNC.
Dukungan antena GNSS
Android 11 memperkenalkan class
GnssAntennaInfo
, yang memungkinkan
aplikasi Anda memaksimalkan penggunaan pemosisian dengan akurasi hingga satuan sentimeter yang dapat disediakan oleh
Global Navigation Satellite System (GNSS).
Pelajari lebih lanjut dalam panduan tentang informasi kalibrasi antena.
Grafis
Decoder gambar NDK
ImageDecoder
API NDK menyediakan API
standar bagi aplikasi C/C++ Android untuk mendekode gambar secara langsung. Developer aplikasi tidak
perlu lagi menggunakan API framework (melalui JNI) atau memaketkan
library decoding gambar pihak ketiga. Untuk mengetahui informasi selengkapnya, lihat
panduan developer Decoder gambar.
API kecepatan frame
Android 11 menyediakan API yang memungkinkan aplikasi memberi tahu sistem tentang kecepatan frame yang diinginkannya, untuk mengurangi judder di perangkat yang mendukung beberapa rasio pembaruan. Untuk mengetahui informasi tentang penggunaan API ini, baca panduan Kecepatan frame.
Meminta dan memeriksa dukungan latensi rendah
Layar tertentu dapat menjalankan pascapemrosesan grafik, seperti beberapa layar eksternal dan TV. Pascapemrosesan ini meningkatkan grafik, tetapi juga dapat meningkatkan latensi. Layar baru yang mendukung HDMI 2.1 memiliki mode latensi rendah otomatis (ALLM, juga dikenal sebagai mode game) yang meminimalkan latensi dengan menonaktifkan pascapemrosesan tersebut. Untuk mengetahui detail selengkapnya tentang ALLM, baca spesifikasi HDMI 2.1.
Jendela dapat meminta agar mode latensi rendah otomatis digunakan, jika tersedia. ALLM sangat berguna untuk aplikasi seperti game dan konferensi video, ketika latensi rendah dirasa lebih penting daripada kualitas grafik terbaik.
Untuk mengaktifkan atau menonaktifkan pascapemrosesan minimal, panggil
Window.setPreferMinimalPostProcessing()
atau tetapkan atribut
preferMinimalPostProcessing
jendela ke true
. Tidak semua layar mendukung
pascapemrosesan minimal; untuk mengetahui apakah layar tertentu mendukungnya, panggil
metode Display.isMinimalPostProcessingSupported()
yang baru.
Injeksi lapisan debug grafik berperforma tinggi
Kini, aplikasi dapat memuat lapisan grafik eksternal (GLES, Vulkan) ke dalam kode aplikasi native untuk menunjukkan fungsionalitas yang sama sebagai aplikasi yang dapat di-debug, tetapi tanpa menimbulkan overhead performa. Fitur ini sangat penting saat membuat profil aplikasi dengan alat seperti GAPID. Untuk membuat profil aplikasi, sertakan elemen meta-data berikut dalam file manifes aplikasi Anda, bukan menjadikan aplikasi dapat di-debug:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Gambar dan kamera
Menonaktifkan suara dan getaran notifikasi selama pengambilan gambar aktif
Mulai di Android 11, saat sedang menggunakan kamera secara aktif, aplikasi
Anda dapat membisukan getaran, suara dan getaran, atau tidak keduanya menggunakan
setCameraAudioRestriction()
.
Dukungan kamera yang diperluas di Android emulator
Untuk informasi tentang dukungan yang diperluas untuk kamera di emulator yang dimulai dengan Android 11, lihat Dukungan kamera.
Dukungan untuk penggunaan lebih dari satu kamera secara serentak
Android 11 menambahkan API guna membuat kueri dukungan untuk penggunaan lebih dari satu kamera pada satu waktu, termasuk kamera depan dan belakang.
Untuk memeriksa dukungan pada perangkat tempat aplikasi Anda berjalan, gunakan metode berikut:
getConcurrentCameraIds()
menampilkanSet
dari kombinasi ID kamera yang dapat melakukan streaming secara serentak dengan kombinasi streaming yang terjamin jika dikonfigurasi dengan proses aplikasi yang sama.isConcurrentSessionConfigurationSupported()
membuat kueri tentang apakah perangkat kamera dapat mendukung konfigurasi sesi yang sesuai secara serentak atau tidak.
Dukungan yang lebih baik untuk pencitraan HEIF dengan beberapa frame
Mulai dari Android 11, jika Anda memanggil ImageDecoder.decodeDrawable()
dan meneruskan pencitraan HEIF yang berisi urutan gambar (seperti animasi atau burst photo), metode tersebut akan menampilkan AnimatedImageDrawable
yang berisi seluruh urutan gambar. Pada versi Android sebelumnya, metode tersebut menampilkan BitmapDrawable
dari satu gambar saja.
Jika grafik HEIF memuat beberapa frame yang tidak berurutan, Anda dapat mengambil frame satu per satu dengan memanggil MediaMetadataRetriever.getImageAtIndex()
.
Aksesibilitas
Pembaruan untuk developer layanan aksesibilitas
Jika Anda menangani pembuatan layanan aksesibilitas kustom, Anda dapat menggunakan fitur berikut di Android 11:
- Penjelasan yang akan dibaca oleh pengguna tentang layanan aksesibilitas sekarang mengizinkan penggunaan HTML dan gambar selain teks biasa. Fleksibilitas ini memudahkan Anda menjelaskan fungsi layanan Anda kepada pengguna akhir dan bagaimana mereka akan terbantu olehnya.
- Untuk menangani deskripsi status elemen UI yang lebih bermakna secara semantik
daripada
contentDescription
, panggil metodegetStateDescription()
. - Untuk meminta agar peristiwa sentuh mengabaikan pemeriksa sentuh sistem, panggil
setTouchExplorationPassthroughRegion()
. Demikian juga, untuk meminta agar gestur mengabaikan detektor gestur sistem, panggilsetGestureDetectionPassthroughRegion()
. - Anda dapat meminta tindakan IME, seperti "enter" dan "next", serta
screenshot jendela yang tidak mengaktifkan tanda
FLAG_SECURE
.
Fitur tambahan
Alasan berhentinya proses aplikasi
Android 11 memperkenalkan metode
ActivityManager.getHistoricalProcessExitReasons()
,
yang melaporkan alasan penghentian proses yang terakhir dijalankan. Aplikasi dapat
menggunakan metode ini untuk mengumpulkan informasi diagnostik error, seperti apakah
penghentian proses disebabkan oleh ANR, masalah memori, atau alasan lainnya.
Selain itu, Anda dapat menggunakan metode
setProcessStateSummary()
yang baru guna menyimpan informasi status kustom untuk analisis selanjutnya.
Metode getHistoricalProcessExitReasons()
menampilkan instance class
ApplicationExitInfo
,
yang berisi informasi terkait penghentian proses suatu aplikasi. Dengan memanggil
getReason()
pada instance class ini, Anda dapat menentukan alasan proses aplikasi
Anda dihentikan. Misalnya, nilai hasil REASON_CRASH
menunjukkan bahwa
telah terjadi pengecualian yang tidak tertangani di aplikasi Anda. Jika aplikasi perlu memastikan
keunikan peristiwa keluar, aplikasi dapat menentukan ID khusus aplikasi, seperti
nilai hash berdasarkan stempel waktu dari
metode
getTimestamp()
.
Referensi lainnya
Untuk mengetahui informasi selengkapnya, baca artikel tentang alat Android 11 baru untuk membuat aplikasi lebih pribadi dan stabil di Medium.
Loader resource
Android 11 memperkenalkan API baru yang memungkinkan aplikasi secara dinamis
memperluas cara resource ditelusuri dan dimuat. Class API baru
ResourcesLoader
dan
ResourcesProvider
terutama berfungsi untuk menyediakan fungsionalitas baru tersebut. Bersama-sama, keduanya
memberikan kemampuan untuk menyediakan resource dan aset tambahan, atau memodifikasi
nilai resource dan aset yang ada.
Objek ResourcesLoader
adalah penampung yang menyediakan objek ResourcesProvider
ke instance
Resources
aplikasi. Sebaliknya,
objek ResourcesProvider
akan menyediakan metode untuk memuat data resource dari
APK dan tabel resource.
Satu kasus penggunaan utama untuk API ini adalah pemuatan aset kustom. Anda dapat menggunakan
loadFromDirectory()
untuk membuat ResourcesProvider
yang akan mengalihkan resolusi
resource dan aset berbasis file sehingga membuatnya menelusuri direktori tertentu selain APK
aplikasi. Anda dapat mengakses aset ini melalui kumpulan metode open()
dari class
AssetManager
API, sama seperti aset yang dipaketkan dalam APK.
APK signature scheme v4
Android 11 menambahkan dukungan untuk APK Signature Scheme v4. Skema ini
menghasilkan jenis tanda tangan baru dalam file yang terpisah (apk-name.apk.idsig
), tetapi
jenis tersebut mirip dengan v2 dan v3. Tidak ada perubahan yang dilakukan pada APK. Skema ini mendukung
Penginstalan APK inkremental melalui ADB, yang mempercepat penginstalan APK.
Filter intent dinamis
Agar dapat menerima intent, pada waktu kompilasi, aplikasi harus mendeklarasikan jenis data mana yang dapat diterimanya dengan menentukan filter intent dalam manifes aplikasi. Di Android 10 dan yang lebih rendah, aplikasi tidak dapat mengubah filter intent pada waktu proses. Hal ini menjadi masalah untuk aplikasi virtualisasi (seperti mesin virtual an desktop jarak jauh), karena aplikasi tersebut tidak dapat mengetahui dengan tepat software apa yang akan diinstal pengguna di dalamnya.
Android 11 memperkenalkan grup MIME, yaitu elemen manifes baru yang memungkinkan aplikasi
mendeklarasikan sekumpulan jenis MIME dinamis dalam filter intent dan mengubahnya
secara terprogram pada waktu proses. Untuk menggunakan grup MIME, sertakan elemen data dalam
manifes aplikasi dengan atribut android:mimeGroup
yang baru:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
Nilai atribut android:mimeGroup
merupakan ID string arbitrer yang
mengidentifikasi grup MIME pada waktu proses. Anda dapat mengakses dan memperbarui konten
grup MIME dengan meneruskan ID-nya ke metode baru berikut dalam class
PackageManager
API:
Saat Anda menambahkan jenis MIME ke grup MIME secara terprogram, fungsinya akan sama persis dengan jenis MIME statis yang dideklarasikan secara eksplisit dalam manifes.
Penyempurnaan isi otomatis
Android 11 memperkenalkan peningkatan untuk layanan isi otomatis.
ID petunjuk dalam AssistStructure.ViewNode
ID ini sering kali berguna bagi layanan isi otomatis untuk menghitung hash tanda tangan
bagi suatu tampilan berdasarkan properti tampilan.
Petunjuk tampilan adalah properti yang cukup efektif untuk disertakan saat menghitung hash tanda tangan, tetapi string petunjuk dapat
berubah dengan lokal ponsel. Untuk mengatasi masalah ini, Android 11
memperluas
AssistStructure.ViewNode
dengan metode
getHintIdEntry()
baru, yang menampilkan ID resource untuk teks petunjuk tampilan. Metode
ini menyediakan nilai yang tidak bergantung pada lokal, yang dapat Anda gunakan untuk menghitung hash
tanda tangan.
Peristiwa set data yang ditampilkan
Untuk membantu layanan isi otomatis meningkatkan sarannya, Android 11 menyediakan cara untuk mengidentifikasi kasus ketika layanan isi otomatis menyajikan set data, tetapi pengguna
tidak memilih satu pun. Di Android 11,
FillEventHistory
melaporkan jenis peristiwa
TYPE_DATASETS_SHOWN
baru. FillEventHistory
mencatat jenis peristiwa ini ke dalam log setiap kali layanan
isi otomatis menampilkan satu atau lebih set data kepada pengguna. Layanan isi otomatis dapat menggunakan
peristiwa ini bersama dengan peristiwa
TYPE_DATASET_SELECTED
yang ada untuk menentukan apakah pengguna telah memilih salah satu opsi isi otomatis yang
disediakan.
Integrasi IME
Keyboard dan IME lainnya kini dapat menampilkan saran isi otomatis secara inline, di strip saran atau antarmuka serupa, bukan di menu drop-down. Untuk melindungi informasi sensitif seperti sandi dan nomor kartu kredit, saran ditampilkan kepada pengguna, tetapi tidak diketahui oleh IME sampai pengguna memilih salah satu. Untuk informasi tentang cara IME dan pengelola sandi dapat mendukung fitur ini, lihat Mengintegrasikan isi otomatis dengan keyboard.
Berbagi data dengan layanan pengambilan konten
Mulai di Android 11, aplikasi Anda dapat berbagi data dengan layanan pengambilan konten perangkat. Kemampuan ini memudahkan perangkat menghadirkan kecerdasan sesuai konteks, seperti menampilkan nama lagu yang sedang diputar di lingkungan pengguna.
Untuk menyediakan data dari aplikasi Anda ke layanan pengambilan konten, panggil metode
shareData()
pada instance ContentCaptureManager
. Jika sistem menerima
permintaan berbagi data tersebut, aplikasi Anda akan menerima deskriptor file dengan izin hanya tulis untuk dibagikan
dengan layanan pengambilan konten.