Ringkasan Fitur dan API

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 ke LAYOUT_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:

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:

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 jenis java.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:

Selain itu, perilaku dua metode dalam MediaCodec.Callback() telah berubah:

onInputBufferAvailable()
Bukannya memanggil MediaCodec.getInputBuffer() dan MediaCodec.queueInputBuffer() dengan indeks, jika dikonfigurasikan untuk menggunakan Block Model API, aplikasi kini akan menggunakan MediaCodec.getQueueRequest dengan indeks, menambahkan LinearBlock/HardwareBuffer ke slot.
onOutputBufferAvailable()
Bukannya memanggil MediaCodec.getOutputBuffer() dengan indeks, aplikasi kini dapat menggunakan MediaCodec.getOutputFrame() dengan indeks untuk mendapatkan objek OutputFrame 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:

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() menampilkan Set 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 metode getStateDescription().
  • Untuk meminta agar peristiwa sentuh mengabaikan pemeriksa sentuh sistem, panggil setTouchExplorationPassthroughRegion(). Demikian juga, untuk meminta agar gestur mengabaikan detektor gestur sistem, panggil setGestureDetectionPassthroughRegion().
  • 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.