Pembaruan izin di Android 11

Android 11 memungkinkan pengguna menentukan izin yang lebih terperinci untuk lokasi, mikrofon, dan kamera. Selain itu, sistem akan mereset izin dari aplikasi tidak terpakai yang menargetkan Android 11, dan aplikasi mungkin perlu memperbarui izin yang dideklarasikannya jika menggunakan jendela notifikasi sistem atau membaca informasi terkait nomor telepon.

Izin satu kali

Di Android 11, setiap kali aplikasi Anda meminta izin terkait lokasi, mikrofon, atau kamera, dialog izin yang dilihat pengguna akan berisi opsi yang disebut Hanya kali ini. Jika pengguna memilih opsi ini dalam dialog, aplikasi Anda akan diberi izin satu kali untuk sementara waktu.

Aplikasi Anda kemudian dapat mengakses data terkait untuk waktu tertentu yang bergantung pada perilaku aplikasi dan tindakan pengguna:

  • Saat aktivitas aplikasi terlihat, aplikasi Anda dapat mengakses data.
  • Jika pengguna memindahkan aplikasi Anda ke latar belakang, aplikasi dapat terus mengakses data untuk waktu yang singkat.
  • Jika Anda meluncurkan layanan latar depan saat aktivitas terlihat, lalu pengguna memindahkan aplikasi ke latar belakang, aplikasi Anda dapat terus mengakses data sampai layanan latar depan berhenti.
  • Jika pengguna mencabut izin satu kali, seperti di setelan sistem, aplikasi Anda tidak dapat mengakses data, meskipun Anda meluncurkan layanan latar depan ataupun tidak. Seperti halnya izin apa pun, jika pengguna mencabut izin satu kali aplikasi Anda, proses aplikasi akan dihentikan.

Saat pengguna membuka aplikasi Anda lagi dan fitur dalam aplikasi Anda meminta akses ke lokasi, mikrofon, atau kamera, pengguna akan dimintai izin lagi.

Mereset izin secara otomatis dari aplikasi yang tidak digunakan

Jika aplikasi Anda menargetkan Android 11 dan tidak digunakan selama beberapa bulan, sistem akan melindungi data pengguna dengan mereset otomatis izin waktu proses sensitif yang telah diberikan pengguna pada aplikasi Anda. Tindakan ini sama seperti jika pengguna melihat izin dalam setelan sistem dan mengubah tingkat akses aplikasi ke Tolak. Jika aplikasi sudah mengikuti praktik terbaik untuk meminta izin pada waktu proses, Anda tidak perlu melakukan perubahan apa pun pada aplikasi. Hal ini karena saat pengguna berinteraksi dengan fitur dalam aplikasi, Anda harus memverifikasi bahwa fitur tersebut memiliki izin yang dibutuhkannya.

Meminta pengguna menonaktifkan reset otomatis

Jika diperlukan, Anda dapat meminta pengguna untuk mencegah sistem mereset izin aplikasi. Cara ini berguna ketika pengguna memperkirakan bahwa aplikasi berfungsi terutama di latar belakang, meskipun tanpa interaksi pengguna, seperti dalam kasus penggunaan berikut:

Gambar 1. Pengguna telah menonaktifkan reset otomatis izin untuk aplikasi yang ditentukan.
  • Menyediakan keamanan bagi keluarga
  • Menyinkronkan data
  • Berkomunikasi dengan perangkat smart
  • Menyambungkan aplikasi dengan perangkat pendamping

Untuk mengarahkan pengguna ke halaman aplikasi di setelan sistem, panggil intent yang menyertakan tindakan intent Intent.ACTION_AUTO_REVOKE_PERMISSIONS. Dari layar ini, pengguna dapat mencegah sistem mereset izin aplikasi dengan melakukan tindakan berikut:

  1. Ketuk Izin, yang memuat layar setelan Izin aplikasi.
  2. Nonaktifkan opsi Hapus izin jika aplikasi tidak digunakan, seperti pada Gambar 1.

Menentukan apakah reset otomatis dinonaktifkan

Untuk memastikan apakah fungsi reset otomatis dinonaktifkan untuk aplikasi, panggil isAutoRevokeWhitelisted(). Jika metode ini menampilkan true, artinya sistem tidak mereset otomatis izin aplikasi.

Menguji fitur reset otomatis

Untuk memastikan bahwa sistem mereset izin aplikasi, lakukan tindakan berikut:

  1. Simpan jumlah waktu tunggu default yang dibutuhkan sistem untuk mereset izin aplikasi. Dengan demikian, Anda dapat mengembalikannya nanti setelah pengujian:

    threshold=$(adb shell device_config get permissions \
      auto_revoke_unused_threshold_millis2)
    
  2. Kurangi jumlah waktu tunggu yang dibutuhkan sistem untuk mereset izin. Pada contoh berikut, sistem dimodifikasi agar mereset izin aplikasi hanya dalam waktu satu detik setelah Anda berhenti berinteraksi dengan aplikasi:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 1000
    
  3. Panggil proses reset otomatis secara manual, seperti dalam cuplikan berikut ini. Pastikan perangkat pengujian telah diaktifkan untuk beberapa lama, kurang lebih 45 detik sebelum Anda menjalankan perintah ini.

    adb shell cmd jobscheduler run -u 0 -f \
      com.google.android.permissioncontroller 2
    
  4. Pastikan bahwa aplikasi Anda dapat menangani peristiwa reset otomatis.

  5. Kembalikan jumlah waktu tunggu default yang dibutuhkan sistem sebelum mereset otomatis izin aplikasi:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 $threshold
    

Visibilitas dialog izin

Android 11 tidak menganjurkan permintaan izin yang telah ditolak pengguna. Jika pengguna secara berulang mengetuk Tolak untuk izin tertentu selama aplikasi Anda diinstal di perangkat, tindakan ini akan diartikan sebagai "jangan minta lagi".

Jika aplikasi sudah mengikuti praktik terbaik terkait izin, Anda tidak perlu mengubah aplikasi untuk mendukung perubahan perilaku ini.

Perubahan jendela notifikasi sistem

Terdapat beberapa perubahan pada cara aplikasi mendapatkan izin SYSTEM_ALERT_WINDOW. Perubahan tersebut dimaksudkan untuk melindungi pengguna dengan membuat pemberian izin menjadi lebih intensional.

Aplikasi tertentu akan mendapatkan izin SYSTEM_ALERT_WINDOW secara otomatis jika diminta

Class aplikasi tertentu akan mendapatkan izin SYSTEM_ALERT_WINDOW secara otomatis jika diminta.

  • Semua aplikasi yang memiliki ROLE_CALL_SCREENING dan meminta SYSTEM_ALERT_WINDOW akan mendapatkan izin secara otomatis. Jika aplikasi kehilangan ROLE_CALL_SCREENING, izin juga akan hilang.

  • Semua aplikasi yang mengambil gambar atau merekam video layar melalui MediaProjection dan permintaan SYSTEM_ALERT_WINDOW akan mendapatkan izin secara otomatis, kecuali pengguna telah menolak izin ke aplikasi secara eksplisit. Jika aplikasi berhenti mengambil gambar atau merekam video layar, izin juga akan hilang. Kasus penggunaan ini utamanya ditujukan pada aplikasi live streaming game.

Aplikasi ini tidak perlu mengirimkan ACTION_MANAGE_OVERLAY_PERMISSION untuk mendapatkan izin SYSTEM_ALERT_WINDOW; aplikasi dapat meminta SYSTEM_ALERT_WINDOW secara langsung.

Intent MANAGE_OVERLAY_PERMISSION selalu mengarahkan pengguna ke layar izin sistem

Mulai dari Android 11, intent ACTION_MANAGE_OVERLAY_PERMISSION selalu membawa pengguna ke layar Setelan level atas di mana pengguna dapat memberikan atau mencabut izin SYSTEM_ALERT_WINDOW untuk aplikasi. Semua data package: dalam intent akan diabaikan.

Pada versi Android sebelumnya, intent ACTION_MANAGE_OVERLAY_PERMISSION dapat menentukan paket, yang akan mengarahkan pengguna ke layar khusus aplikasi untuk mengelola izin. Fungsi ini tidak lagi didukung di Android 11. Sebagai gantinya, pengguna harus memilih aplikasi yang ingin diberi izin atau cabut izinnya terlebih dahulu. Perubahan ini dimaksudkan untuk melindungi pengguna dengan membuat pemberian izin menjadi lebih intensional.

Nomor telepon

Android 11 mengubah izin terkait ponsel yang digunakan aplikasi Anda saat membaca nomor telepon.

Jika aplikasi Anda menargetkan Android 11 dan perlu mengakses API nomor telepon yang ditampilkan di daftar berikut, Anda harus meminta izin READ_PHONE_NUMBERS, bukan izin READ_PHONE_STATE.

Jika aplikasi mendeklarasikan READ_PHONE_STATE untuk memanggil metode selain metode yang ada di daftar sebelumnya, Anda dapat terus meminta READ_PHONE_STATE di semua versi Android. Jika Anda menggunakan izin READ_PHONE_STATE hanya untuk metode yang ada di daftar sebelumnya, update file manifes Anda seperti berikut:

  1. Ubah deklarasi READ_PHONE_STATE agar aplikasi hanya menggunakan izin di Android 10 (API level 29) dan versi yang lebih rendah.
  2. Tambahkan izin READ_PHONE_NUMBERS.

Cuplikan deklarasi manifes berikut menunjukkan proses ini:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="READ_PHONE_NUMBERS" />
</manifest>