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 atau versi yang lebih tinggi, dan aplikasi mungkin perlu memperbarui izin yang dideklarasikannya jika menggunakan jendela notifikasi sistem atau membaca informasi nomor telepon.

Izin satu kali

Dimulai 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.

Pelajari lebih lanjut cara sistem menangani izin satu kali.

Mereset izin secara otomatis dari aplikasi yang tidak digunakan

Jika aplikasi Anda menargetkan Android 11 atau versi yang lebih tinggi, 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.

Pelajari lebih lanjut cara sistem mereset izin aplikasi yang tidak digunakan secara otomatis.

Visibilitas dialog izin

Dimulai di Android 11, jika pengguna mengetuk Tolak untuk izin tertentu lebih dari sekali selama masa aktif penginstalan aplikasi di perangkat, pengguna tidak akan melihat dialog izin sistem jika aplikasi meminta lagi izin tersebut. Tindakan pengguna menyiratkan "jangan tanya lagi". Pada versi sebelumnya, pengguna akan melihat dialog izin sistem setiap kali aplikasi Anda meminta izin, kecuali pengguna telah terlebih dahulu memilih kotak centang "jangan tanya lagi". Perubahan perilaku ini di Android 11 tidak menganjurkan permintaan izin berulang yang telah ditolak pengguna.

Untuk mengidentifikasi apakah izin aplikasi telah ditolak secara permanen (untuk tujuan proses debug dan pengujian), gunakan perintah berikut:

adb shell dumpsys package PACKAGE_NAME

Dengan PACKAGE_NAME adalah nama paket yang akan diperiksa.

Output perintah berisi bagian yang terlihat seperti ini:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

Izin yang telah ditolak sekali oleh pengguna ditandai oleh USER_SET. Izin yang telah ditolak secara permanen dengan memilih Tolak dua kali ditandai oleh USER_FIXED.

Selama pengujian, Anda mungkin ingin mereset flag ini untuk memastikan penguji tidak terkejut saat dialog permintaan tidak ditampilkan. Untuk melakukannya, gunakan perintah:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME adalah nama izin yang ingin Anda reset. Untuk melihat daftar lengkap izin aplikasi Android, kunjungi halaman referensi API izin.

Pelajari lebih lanjut cara menangani penolakan izin di aplikasi.

Perubahan jendela notifikasi sistem

Android 11 membuat 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 didukung untuk 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 atau versi yang lebih tinggi, 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="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

Referensi lainnya

Untuk informasi selengkapnya tentang perubahan pada izin di Android 11, lihat materi berikut:

Video

Mengembangkan dengan perubahan privasi terbaru di Android 11