ACCESS_COARSE_LOCATION
saja.Android 12 dibuat berdasarkan perubahan platform terbaru pada model izin
lokasi, termasuk lokasi
latar belakang dan izin
satu kali. Jika aplikasi menarget
Android 12, pengguna dapat meminta agar aplikasi hanya
mengambil informasi perkiraan lokasi, meskipun jika aplikasi meminta
izin runtime
ACCESS_FINE_LOCATION
.
Jika aplikasi meminta ACCESS_COARSE_LOCATION
tetapi tidak meminta
ACCESS_FINE_LOCATION
, perubahan yang dijelaskan di halaman ini tidak akan berpengaruh.
Gambar 1 menunjukkan dialog yang muncul untuk pengguna saat aplikasi
menarget Android 12 dan meminta ACCESS_COARSE_LOCATION
saja.
Untuk lebih menghormati privasi pengguna, sebaiknya Anda hanya meminta
ACCESS_COARSE_LOCATION
. Anda dapat memenuhi sebagian besar kasus penggunaan meskipun
jika hanya memiliki akses ke informasi perkiraan lokasi.
Jika aplikasi menarget Android 12 dan Anda meminta
izin ACCESS_FINE_LOCATION
, Anda juga harus
meminta izin
ACCESS_COARSE_LOCATION
. Anda harus menyertakan kedua izin tersebut dalam satu permintaan runtime. Jika
Anda mencoba meminta ACCESS_FINE_LOCATION
saja, sistem akan mengabaikan permintaan
tersebut dan mencatat pesan error berikut di Logcat:
ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION
.
Pilihan pengguna antara perkiraan lokasi dan lokasi akurat
ACCESS_FINE_LOCATION
dan ACCESS_COARSE_LOCATION
dalam
satu permintaan runtime.Saat aplikasi Anda meminta ACCESS_FINE_LOCATION
dan ACCESS_COARSE_LOCATION
,
dialog izin sistem menyertakan opsi baru berikut untuk pengguna:
- Akurat: Memberikan akurasi lokasi yang
diberikan oleh izin
ACCESS_FINE_LOCATION
. - Perkiraan: Memberikan akurasi lokasi yang
diberikan oleh izin
ACCESS_COARSE_LOCATION
.
Gambar 2 menunjukkan bahwa dialog berisi gestur visual untuk kedua opsi baru, guna membantu pengguna memilih. Setelah memutuskan keakuratan lokasi, pengguna akan mengetuk salah satu dari tiga tombol untuk memilih durasi pemberian izin. Tombol-tombol ini sama dengan tombol yang muncul di dialog izin lokasi pada perangkat yang menjalankan Android 11 (API level 30).
Pada Android 12, pengguna dapat membuka setelan sistem untuk menyetel akurasi lokasi pilihan untuk aplikasi apa pun, terlepas dari versi SDK target aplikasi tersebut. Hal ini berlaku meskipun jika aplikasi Anda diinstal di perangkat yang menjalankan Android 11 atau yang lebih lama, lalu di-upgrade ke Android 12. Jika pengguna men-downgrade akses lokasi aplikasi dari akurat ke perkiraan, baik dari dialog izin maupun di setelan sistem, sistem akan memulai ulang proses aplikasi. Karena alasan ini, Anda harus mengikuti praktik terbaik untuk meminta izin runtime.
Pilihan pengguna memengaruhi pemberian izin
Tabel berikut menunjukkan izin yang diberikan sistem ke aplikasi Anda, berdasarkan opsi yang dipilih pengguna dalam dialog runtime izin:
Akurat | Perkiraan | |
---|---|---|
Saat aplikasinya digunakan | ACCESS_FINE_LOCATION dan ACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
Hanya kali ini | ACCESS_FINE_LOCATION dan ACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
Tolak | Tidak ada izin lokasi | Tidak ada izin lokasi |
Untuk mengetahui izin yang telah diberikan sistem kepada aplikasi, periksa nilai yang dihasilkan permintaan izin. Anda dapat menggunakan library Jetpack dalam kode yang mirip dengan contoh berikut, atau menggunakan library platform, tempat Anda mengelola sendiri kode permintaan izin.
Kotlin
val locationPermissionRequest = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() ) { permissions -> when { permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> { // Precise location access granted. } permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> { // Only approximate location access granted. } else -> { // No location access granted. } } } // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION))
Java
ActivityResultLauncher<String[]> locationPermissionRequest = registerForActivityResult(new ActivityResultContracts .RequestMultiplePermissions(), result -> { Boolean fineLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_FINE_LOCATION, false); Boolean coarseLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_COARSE_LOCATION,false); if (fineLocationGranted != null && fineLocationGranted) { // Precise location access granted. } else if (coarseLocationGranted != null && coarseLocationGranted) { // Only approximate location access granted. } else { // No location access granted. } } ); // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION });
Pilihan pengguna juga memengaruhi lokasi latar belakang
Jika sistem memberikan izin
ACCESS_BACKGROUND_LOCATION
ke aplikasi Anda, pilihan pengguna dalam dialog
izin lokasi juga berlaku untuk lokasi latar belakang.
Misalnya, jika pengguna memberi aplikasi izin ACCESS_BACKGROUND_LOCATION
,
tetapi memberikan akses perkiraan lokasi di latar depan saja,
aplikasi juga mendapatkan akses perkiraan lokasi di latar belakang saja.
Meng-upgrade ke lokasi akurat
Perkiraan lokasi dapat memengaruhi aplikasi jika saat ini aplikasi mengandalkan
akses lokasi akurat menggunakan izin ACCESS_FINE_LOCATION
.
Sebelum meminta pengguna untuk meng-upgrade akses aplikasi ke lokasi akurat,
pertimbangkan apakah kasus penggunaan aplikasi benar-benar memerlukan tingkat
ketepatan ini. Jika aplikasi perlu menyambungkan sebuah perangkat dengan perangkat di sekitar melalui Bluetooth
atau Wi-Fi, pertimbangkan untuk menggunakan penyambungan
perangkat pendamping atau
Izin Bluetooth yang baru, daripada
meminta izin ACCESS_FINE_LOCATION
.
Untuk meminta pengguna meng-upgrade akses lokasi aplikasi dari perkiraan ke akurat, lakukan hal berikut:
- Jika perlu, jelaskan alasan aplikasi Anda memerlukan izin.
- Minta izin
ACCESS_FINE_LOCATION
danACCESS_COARSE_LOCATION
lagi. Karena pengguna telah mengizinkan sistem untuk memberikan perkiraan lokasi kepada aplikasi, dialog sistem kali ini berbeda, seperti yang ditunjukkan pada gambar 3 dan gambar 4:
Menguji cara aplikasi menangani perkiraan lokasi
Untuk mengevaluasi apakah Anda perlu meng-update aplikasi guna mendukung akurasi lokasi yang dapat dikonfigurasi pengguna, selesaikan pengujian yang dijelaskan di bagian ini.
Menangani permintaan perkiraan lokasi dari dialog
Untuk mengetahui cara aplikasi menangani permintaan pengguna agar aplikasi mendapatkan akses perkiraan lokasi dari dialog baru, lakukan hal berikut:
- Minta
ACCESS_FINE_LOCATION
danACCESS_COARSE_LOCATION
. - Pada dialog yang muncul (gambar 2), pilih Perkiraan di dekat bagian atas, dan Saat aplikasinya digunakan atau Hanya kali ini di dekat bagian bawah.
- Pastikan kasus penggunaan aplikasi masih berfungsi sesuai harapan, meskipun jika aplikasi hanya memiliki akses perkiraan lokasi.
Menangani downgrade perkiraan lokasi dari setelan sistem
Untuk mengetahui cara aplikasi menangani permintaan pengguna agar akses lokasi aplikasi diubah dari akurat ke perkiraan di setelan sistem, lakukan hal berikut:
- Minta
ACCESS_FINE_LOCATION
danACCESS_COARSE_LOCATION
. - Pada dialog yang muncul (gambar 2), pilih Akurat di dekat bagian atas, dan Saat aplikasinya digunakan atau Hanya kali ini di dekat bagian bawah.
- Buka layar izin aplikasi di setelan sistem.
Pada layar izin lokasi, nonaktifkan Gunakan lokasi akurat. Opsi ini dapat dilihat pada gambar 5.
Seperti halnya downgrade izin, sistem akan memulai ulang proses aplikasi Anda.
Pastikan kasus penggunaan aplikasi masih berfungsi sesuai harapan, meskipun jika aplikasi hanya memiliki akses perkiraan lokasi.
Menangani upgrade lokasi akurat dari setelan sistem
Untuk mengetahui cara aplikasi menangani permintaan pengguna agar akses lokasi aplikasi diubah dari perkiraan ke akurat di setelan sistem, lakukan hal berikut:
- Minta
ACCESS_FINE_LOCATION
danACCESS_COARSE_LOCATION
. - Pada dialog yang muncul (gambar 2), pilih Perkiraan di dekat bagian atas, dan Saat aplikasinya digunakan atau Hanya kali ini di dekat bagian bawah.
- Buka layar izin aplikasi di setelan sistem.
Pada layar izin lokasi, aktifkan Gunakan lokasi akurat, seperti yang ditunjukkan pada gambar 5.
Sistem tidak akan memulai ulang aplikasi karena perubahan izin ini adalah upgrade.
Periksa apakah aplikasi menerima data lokasi yang lebih akurat dalam kasus penggunaan berbasis lokasinya atau tidak.
Memeriksa persyaratan lokasi di dependensi SDK aplikasi
Periksa apakah aplikasi Anda menggunakan SDK yang mengandalkan
izin ACCESS_FINE_LOCATION
. Baca artikel ini di Medium tentang Mengenal perilaku
dependensi
SDK.