Meminta izin akses lokasi

Untuk melindungi privasi pengguna, aplikasi yang menggunakan layanan lokasi harus meminta izin akses lokasi.

Beberapa izin terkait dengan lokasi. Izin mana yang Anda minta, dan cara memintanya, bergantung pada persyaratan lokasi untuk kasus penggunaan aplikasi Anda.

Halaman ini menjelaskan berbagai jenis persyaratan lokasi dan menjelaskan cara meminta izin akses lokasi dalam setiap kasus.

Untuk meminta izin akses lokasi, ikuti praktik terbaik untuk semua izin runtime.

Jenis akses lokasi

Setiap izin memiliki kombinasi karakteristik berikut:

Lokasi latar depan

Jika aplikasi Anda berisi fitur yang membagikan atau menerima informasi lokasi satu kali saja atau selama jangka waktu yang ditentukan, maka fitur tersebut memerlukan akses lokasi latar depan. Berikut beberapa contohnya:

  • Pada aplikasi navigasi, suatu fitur memungkinkan pengguna mendapatkan petunjuk arah belokan demi belokan.
  • Dalam aplikasi pesan, suatu fitur memungkinkan pengguna berbagi lokasinya saat ini dengan pengguna lain.

Sistem menganggap aplikasi Anda menggunakan lokasi latar depan jika fitur aplikasi Anda mengakses lokasi perangkat saat ini dalam salah satu situasi berikut:

  • Aktivitas berasal dari aplikasi Anda terlihat.
  • Aplikasi Anda menjalankan layanan latar depan. Saat layanan latar depan berjalan, sistem akan membuat pengguna menyadarinya dengan menampilkan notifikasi persisten. Aplikasi Anda terus memiliki akses jika ditempatkan di latar belakang, seperti saat pengguna menekan tombol Beranda di perangkat atau menonaktifkan layar perangkatnya.

    Selain itu, Anda harus mendeklarasikan jenis layanan latar depan location, seperti yang ditunjukkan dalam cuplikan kode berikut. Di Android 10 (API level 29) dan yang lebih baru, Anda harus mendeklarasikan jenis layanan latar depan ini.

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

Anda mendeklarasikan kebutuhan untuk lokasi latar depan saat aplikasi meminta izin ACCESS_COARSE_LOCATION atau izin ACCESS_FINE_LOCATION, seperti yang ditunjukkan dalam cuplikan berikut:

<manifest ... >
  <!-- Always include this permission -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

Lokasi latar belakang

Aplikasi memerlukan akses lokasi latar belakang jika suatu fitur dalam aplikasi terus-menerus berbagi lokasi dengan pengguna lain atau menggunakan Geofencing API. Beberapa contohnya meliputi:

  • Dalam aplikasi berbagi lokasi keluarga, suatu fitur memungkinkan pengguna untuk terus berbagi lokasi dengan anggota keluarga.
  • Dalam aplikasi IoT, suatu fitur memungkinkan pengguna untuk mengonfigurasi perangkat smart home mereka, sehingga perangkat akan nonaktif ketika pengguna meninggalkan rumah dan aktif kembali saat pengguna kembali ke rumah.

Sistem menganggap aplikasi Anda menggunakan lokasi latar belakang jika mengakses lokasi perangkat saat ini dalam situasi apa pun selain yang dijelaskan di bagian lokasi latar depan. Presisi lokasi latar belakang sama dengan presisi lokasi latar depan, yang bergantung pada izin akses lokasi yang dideklarasikan aplikasi Anda.

Di Android 10 (API level 29) dan yang lebih tinggi, Anda harus mendeklarasikan izin ACCESS_BACKGROUND_LOCATION dalam manifes aplikasi untuk meminta akses lokasi latar belakang pada runtime. Pada versi Android yang lebih lama, jika aplikasi Anda menerima akses lokasi latar depan, aplikasi juga otomatis menerima akses lokasi latar belakang.

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Akurasi

Android mendukung level akurasi lokasi berikut:

Perkiraan
Memberikan estimasi lokasi perangkat. Jika estimasi lokasi ini berasal dari LocationManagerService atau FusedLocationProvider, estimasi ini akurat dalam jarak sekitar 3 kilometer persegi (sekitar 1,2 mil persegi). Aplikasi Anda dapat menerima lokasi pada tingkat akurasi ini saat Anda mendeklarasikan izin ACCESS_COARSE_LOCATION, tetapi bukan izin ACCESS_FINE_LOCATION.
Akurat
Memberikan estimasi lokasi perangkat seakurat mungkin. Jika estimasi lokasi berasal dari LocationManagerService atau FusedLocationProvider, estimasi ini biasanya berada dalam jarak sekitar 50 meter (160 kaki) dan terkadang sangat akurat hingga beberapa meter (10 kaki) atau lebih akurat lagi. Aplikasi Anda dapat menerima lokasi pada tingkat akurasi ini saat Anda mendeklarasikan izin ACCESS_FINE_LOCATION.

Jika pengguna memberikan izin akses perkiraan lokasi, aplikasi Anda hanya memiliki akses ke perkiraan lokasi, terlepas dari izin akses lokasi yang dideklarasikan aplikasi Anda.

Aplikasi Anda tetap harus berfungsi saat pengguna hanya memberikan akses perkiraan lokasi. Jika fitur di aplikasi Anda benar-benar memerlukan akses ke lokasi akurat menggunakan izin ACCESS_FINE_LOCATION, Anda dapat meminta pengguna untuk mengizinkan aplikasi Anda untuk mengakses lokasi akurat.

Pengingat pemberian lokasi latar belakang

Di Android 10 (API level 29) dan yang lebih tinggi, saat fitur dalam aplikasi Anda mengakses lokasi perangkat di latar belakang untuk pertama kalinya setelah pengguna memberikan akses lokasi latar belakang, sistem akan menjadwalkan notifikasi untuk dikirimkan kepada pengguna. Notifikasi ini mengingatkan pengguna bahwa mereka telah mengizinkan aplikasi untuk mengakses lokasi perangkat sepanjang waktu. Contoh notifikasi muncul pada gambar 8.

Memeriksa persyaratan lokasi di dependensi SDK aplikasi

Periksa apakah aplikasi Anda menggunakan SDK yang bergantung pada izin akses lokasi, terutama izin ACCESS_FINE_LOCATION. Baca postingan blog Mengenal perilaku dependensi SDK di Medium untuk mengetahui informasi selengkapnya.

Referensi lainnya

Untuk mengetahui informasi selengkapnya tentang izin akses lokasi di Android, lihat materi berikut:

Codelab

Video

Contoh