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.

Meskipun beberapa jenis aplikasi (seperti peluncur dan wallpaper) mungkin akan berfungsi lebih optimal jika mengetahui sudut engsel yang tepat, sebagian besar aplikasi harus menggunakan library Jetpack Window Manager untuk mengetahui kondisi perangkat dengan memanggil DeviceState.getPosture().

Atau, aplikasi Anda dapat memanggil registerDeviceStateChangeCallback() agar diberi tahu saat DeviceState berubah dan memberikan reaksi saat kondisinya berubah.

Merespons kondisi perangkat akan lebih aman dan optimal karena banyaknya konfigurasi jendela dan perangkat yang berbeda di pasar saat ini dan yang akan datang berikutnya.

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), 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 kini 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

Di Android 11 (API level 30) dan yang lebih tinggi, aplikasi dengan izin android.Manifest.permission.READ_PHONE_STATE dapat meminta pembaruan informasi tampilan telepon melalui PhoneStateListener.onDisplayInfoChanged(). Pembaruan ini mencakup informasi teknologi akses radio untuk tujuan pemasaran dan branding.

Beragam solusi tampilan ikon 5G untuk berbagai operator disediakan oleh API baru ini. Teknologi yang didukung meliputi:

  • LTE
  • LTE dengan agregasi operator (LTE+)
  • LTE pro lanjutan (5Ge)
  • NR (5G)
  • NR pada band seluler gelombang milimeter (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.

Jenis autentikasi

Android 11 memperkenalkan antarmuka BiometricManager.Authenticators, yang menentukan jenis autentikasi yang didukung oleh class BiometricManager:

BIOMETRIC_STRONG
Autentikasi menggunakan elemen hardware yang memenuhi tingkat kekuatan Kuat, sebagaimana ditentukan pada halaman Definisi Kompatibilitas.
BIOMETRIC_WEAK
Autentikasi menggunakan elemen hardware yang memenuhi tingkat kekuatan Lemah, sebagaimana ditentukan pada halaman Definisi Kompatibilitas.
DEVICE_CREDENTIAL
Autentikasi menggunakan kredensial kunci layar, yaitu PIN, pola, atau sandi pengguna.

Untuk menentukan jenis autentikasi biometrik yang diterima aplikasi Anda, teruskan salah satu jenis autentikasi atau kombinasi bitwise dari beberapa jenis ke dalam metode setAllowedAuthenticators(). Sebagai contoh, jika aplikasi Anda menerima elemen hardware "kuat" atau kredensial kunci layar, teruskan BIOMETRIC_STRONG | DEVICE_CREDENTIAL.

Untuk mengetahui ketersediaan elemen autentikasi yang diperlukan, teruskan kombinasi bitwise yang sama dari beberapa jenis ke dalam metode canAuthenticate(). Jika perlu, panggil tindakan intent ACTION_BIOMETRIC_ENROLL. Dalam tambahan intent, sediakan kumpulan pengautentikasi yang diterima aplikasi Anda. Intent ini meminta pengguna mendaftarkan kredensial untuk pengautentikasi yang diterima aplikasi Anda.

Setelah pengguna melakukan autentikasi, Anda dapat memeriksa apakah pengguna melakukannya menggunakan kredensial perangkat atau kredensial biometrik dengan memanggil getAuthenticationType().

Dukungan tambahan untuk kunci autentikasi per penggunaan

Android 11 memberikan lebih banyak dukungan untuk kunci autentikasi per penggunaan dalam class BiometricPrompt. Kunci tersebut meminta pengguna memberikan kredensial biometrik, kredensial perangkat, atau keduanya setiap kali aplikasi Anda perlu mengakses data yang dilindungi oleh kunci tersebut. Kunci autentikasi per penggunaan berguna untuk transaksi bernilai tinggi, seperti melakukan pembayaran dalam jumlah besar atau memperbarui catatan kesehatan seseorang.

Untuk mengaitkan objek BiometricPrompt dengan kunci autentikasi per penggunaan, tambahkan kode seperti contoh berikut:

Kotlin

val authPerOpKeyGenParameterSpec =
        KeyGenParameterSpec.Builder("myKeystoreAlias", key-purpose)
    // Accept either a biometric credential or a device credential.
    // To accept only one type of credential, include only that type as the
    // 2nd argument.
    .setUserAuthenticationParameters(0 /* duration */,
            KeyProperties.AUTH_BIOMETRIC_STRONG or
            KeyProperties.AUTH_DEVICE_CREDENTIAL)
    .build()

Java

KeyGenParameterSpec authPerOpKeyGenParameterSpec =
        new KeyGenParameterSpec.Builder("myKeystoreAlias", key-purpose)
    // Accept either a biometric credential or a device credential.
    // To accept only one type of credential, include only that type as the
    // 2nd argument.
    .setUserAuthenticationParameters(0 /* duration */,
            KeyProperties.AUTH_BIOMETRIC_STRONG |
            KeyProperties.AUTH_DEVICE_CREDENTIAL)
    .build();

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 menyambungkan perangkat secara langsung melalui USB dan berkutat dengan masalah koneksi USB umum, seperti penginstalan driver.

Untuk menggunakan proses debug nirkabel, Anda harus menyambungkan perangkat ke komputer menggunakan kode penghubung. Komputer dan perangkat Anda harus terhubung ke jaringan nirkabel yang sama. Untuk menghubungkan perangkat, ikuti langkah-langkah berikut:

Dialog penyambungan adb nirkabel
  1. Di komputer Anda, update SDK Platform-Tools ke versi terbaru.
  2. Di perangkat, aktifkan opsi developer.
  3. Aktifkan opsi Proses debug nirkabel.
  4. Pada dialog yang menanyakan Izinkan proses debug nirkabel di jaringan ini?, klik Izinkan.
  5. Pilih Sambungkan perangkat dengan kode penghubung. Catat kode penghubung, alamat IP, dan nomor port yang ditampilkan di perangkat (lihat gambar).
  6. Di komputer, buka terminal dan buka android_sdk/platform-tools.
  7. Jalankan adb pair ipaddr:port. Gunakan alamat IP dan nomor port dari langkah 5.
  8. Saat diminta, masukkan kode penghubung yang Anda terima pada langkah 5. Akan muncul pesan yang menunjukkan bahwa perangkat Anda berhasil disambungkan.

    Enter pairing code: 482924
    Successfully paired to 192.168.1.130:37099 [guid=adb-235XY]
    
  9. (Khusus Linux atau Microsoft Windows) Jalankan adb connect ipaddr:port. Gunakan alamat IP dan port pada Proses debug nirkabel (lihat gambar di bawah).

    nomor IP dan port adb nirkabel

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 masukan

Transisi IME yang ditingkatkan

Android 11 memperkenalkan API baru untuk meningkatkan transisi bagi editor metode masukan (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:

OpenSL ES sudah tidak digunakan lagi

Mulai dari NDK r21b beta 2, OpenSL ES API sudah tidak digunakan lagi. Anda kini dapat menggunakan Oboe.

Platform ini masih mendukung OpenSL ES untuk aplikasi yang ada. Namun, peringatan build akan muncul saat menggunakan OpenSL ES dengan minSdkVersion 30 atau yang lebih tinggi.

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.

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.

Menekan tombol pemilihan rute dalam notifikasi media akan menampilkan pengalih output dengan pilihan berikut secara default:

  • Speaker di perangkat saat ini
  • Semua perangkat audio bluetooth yang terhubung

Aplikasi juga dapat menyediakan lebih banyak opsi berdasarkan kemampuannya, seperti Cast, misalnya.

Aplikasi dapat menggunakan MediaRouter2 API yang baru untuk menyesuaikan pilihan perutean. Anda dapat mengecualikan perangkat yang tidak didukung (seperti memfilter Chromecast khusus audio jika Anda menonton smart TV Netflix) atau menyertakan perangkat khusus lainnya yang dikenali aplikasi Anda.

Konektivitas

Penyempurnaan Passpoint Wi-Fi

Passpoint memungkinkan aplikasi melakukan autentikasi dan terhubung ke hotspot Wi-Fi yang aman secara otomatis dan tanpa pemberitahuan. Aplikasi yang menargetkan API level 30 dan yang lebih tinggi dapat menggunakan kemampuan tambahan Passpoint berikut ini.

Notifikasi dan penerapan tanggal habis masa berlaku
Dengan menerapkan tanggal habis masa berlaku pada profil, framework dapat menghindari sambungan otomatis ke titik akses dengan kredensial yang sudah tidak berlaku, yang sudah pasti akan gagal. Hal ini mencegah penggunaan pulsa, serta menghemat bandwidth backend dan baterai. Selain itu, notifikasi juga akan ditampilkan kepada pengguna saat profil mereka berada dalam jangkauan dan habis masa berlakunya.
Pencocokan FQDN
Mengizinkan konfigurasi domain bernama AAA secara terpisah dari nama domain yang sepenuhnya memenuhi syarat (FQDN) Protokol Kueri Jaringan Akses (ANQP), menggunakan node Ekstensi/Android dalam Objek Pengelolaan (MO) PerProviderSubscription (PPS).
CA pribadi yang ditandatangani sendiri
Untuk Profil Passpoint R1, Android menyetujui CA pribadi yang ditandatangani sendiri untuk autentikasi sambungan.
Mengizinkan beberapa profil dengan FQDN yang sama
Mengizinkan penginstalan beberapa profil Passpoint dengan FQDN yang sama. FQDN tidak digunakan sebagai kunci untuk profil. Passpoint API yang ada yang memerlukan FQDN, seperti remove, menerapkan permintaan ke semua profil yang cocok dengan FQDN yang sama.
Mengizinkan penginstalan profil tanpa Sertifikat CA Root
Profil tanpa Sertifikat CA Root diizinkan. Dalam hal ini, sistem akan memverifikasi sertifikat server AAA terhadap Sertifikat CA Root publik yang diinstal di truststore.
Pencocokan penyedia Roaming dan Rumah yang disempurnakan
Sistem akan mencocokkan jaringan Rumah atau Roaming terlepas dari metode autentikasi yang diterapkan. Selain itu, dukungan untuk pencocokan Rumah bagi daftar OtherHomePartners dan HomeOIList telah ditambahkan.

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.

Pembaruan pada 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.

Update untuk Open Mobile API

Mulai Android 11, Open Mobile API (OMAPI) memiliki fungsi tambahan:

  • Mengurai aturan untuk hak istimewa operator.

  • Menyesuaikan akses Elemen Pengaman tersemat (eSE) atau menyediakan eSE menggunakan satu atau beberapa hal berikut:

    • Izin hak istimewa sistem
    • ID aplikasi (AID) Access Rule Application Master (ARA-M) yang dapat dikonfigurasi
    • API sistem untuk mereset pembaca OMAPI
  • Memberi pembaca indikator yang jelas bagi aplikasi untuk memfilter kemampuan perangkat.

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/IPset di aplikasi.

Kontrol akses jaringan per proses

Mulai di Android 11, aplikasi yang menangani data pengguna sensitif dapat memberikan izin akses jaringan per proses. Dengan secara eksplisit menentukan proses yang diizinkan untuk mengakses jaringan, Anda mengisolasi semua kode yang tidak perlu mengupload data.

Meskipun tidak menjamin akan mencegah aplikasi Anda mengupload data secara tidak sengaja, cara ini memungkinkan Anda mengurangi kemungkinan bug dalam aplikasi yang menyebabkan kebocoran data.

Berikut adalah contoh file manifes yang menggunakan fungsionalitas baru ini:

<processes>
    <process />
    <deny-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet1" />
    <process android:process="com.android.cts.useprocess.withnet1">
        <allow-permission android:name="android.permission.INTERNET" />
    </process>
    <allow-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet2">
        <deny-permission android:name="android.permission.INTERNET" />
    </process>
    <process android:process="com.android.cts.useprocess.withnet2" />
</processes>

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). Setelah pengguna memberi aplikasi Anda izin ACCESS_FINE_LOCATION, aplikasi dapat mengakses detail berikut yang terkait dengan antena GNSS:

  • Koordinat phase center offset (PCO)
  • Koreksi phase center variation (PCV)
  • Koreksi penguatan sinyal

Untuk menentukan apakah perangkat dapat memberikan informasi antena GNSS ke aplikasi Anda, panggil hasGnssAntennaInfo().

Pertimbangan privasi

  • Antena GNSS hanya dapat mengidentifikasi model perangkat, dan tidak dapat mengidentifikasi perangkat secara individu.
  • Penggunaan class GnssAntennaInfo memerlukan izin ACCESS_FINE_LOCATION.

Grafik

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>

ANGLE untuk OpenGL ES

Anda dapat menjalankan aplikasi noninti menggunakan ANGLE untuk mengevaluasi performa dan memutuskan apakah aplikasi tertentu harus menggunakan ANGLE daripada driver OpenGL ES native. Untuk melihat petunjuknya, baca Menggunakan ANGLE untuk OpenGL ES.

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

Android 11 memperkenalkan kemampuan kamera Android Emulator yang ditingkatkan. Fitur yang ditambahkan meliputi:

  • Pengambilan foto RAW
  • Pemrosesan ulang YUV
  • Perangkat level 3
  • Dukungan kamera logis
  • Mengemulasi orientasi sensor menggunakan data dari pengelola sensor
  • Menerapkan stabilisasi video dengan mengurangi frekuensi guncangan tangan
  • Menerapkan penyempurnaan tepi dengan meniadakan peningkatan resolusi yang biasanya dilakukan di pipeline YUV
  • Kamera serentak

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().

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 Skema Tanda Tangan APK 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.