Meminta izin akses lokasi

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

Saat Anda meminta izin akses lokasi, ikuti praktik terbaik yang sama seperti yang Anda lakukan untuk izin runtime lainnya. Satu perbedaan penting dalam hal izin akses lokasi adalah sistem menyertakan beberapa izin yang 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 memberikan panduan cara meminta izin akses lokasi dalam setiap kasus.

Jenis akses lokasi

Izin akses lokasi Android berhubungan dengan kategori akses lokasi berikut:

Bagian ini menjelaskan situasi saat aplikasi Anda menggunakan setiap kategori.

Lokasi latar depan

Jika aplikasi Anda berisi fitur yang berbagi atau menerima informasi lokasi hanya sekali, 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 yang termasuk dalam 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 mempertahankan akses jika ditempatkan di latar belakang, seperti saat pengguna menekan tombol Beranda di perangkat atau menonaktifkan layar perangkatnya.

    Selain itu, sebaiknya Anda 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 ... >
  <!-- To request foreground location access, declare one of these permissions. -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

Tingkat presisi bergantung pada izin yang Anda minta:

ACCESS_COARSE_LOCATION
Memberikan perkiraan lokasi perangkat, hingga jarak sekitar 0,6 km (1 mil).
ACCESS_FINE_LOCATION
Memberikan perkiraan lokasi perangkat seakurat mungkin, biasanya dalam jarak sekitar 50 meter (160 kaki) dan terkadang sangat akurat hingga beberapa meter (10 kaki) atau lebih akurat lagi.

Izin ini diperlukan untuk beberapa tugas konektivitas, seperti menghubungkan ke perangkat di sekitar melalui Bluetooth Hemat Energi (BLE).

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 rumah mereka, sehingga perangkat akan nonaktif ketika pengguna meninggalkan rumah dan aktif kembali ketika 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>

Meminta akses lokasi pada saat runtime

Saat suatu fitur di aplikasi Anda memerlukan akses lokasi, tunggu hingga pengguna berinteraksi dengan fitur tersebut sebelum membuat permintaan izin. Alur kerja ini mengikuti praktik terbaik untuk meminta izin runtime dalam konteks, seperti yang dijelaskan dalam panduan yang menjelaskan cara meminta izin aplikasi.

Gambar 1 menunjukkan contoh cara melakukan proses ini. Aplikasi ini berisi fitur "berbagi lokasi" yang memerlukan akses lokasi latar depan. Namun, aplikasi tidak meminta izin akses lokasi, sampai pengguna memilih tombol Bagikan lokasi.

Setelah pengguna memilih tombol Bagikan Lokasi,
    dialog izin akses lokasi sistem akan muncul
Gambar 1. Fitur berbagi lokasi yang memerlukan akses lokasi latar depan. Fitur ini diaktifkan jika pengguna memilih Izinkan hanya saat aplikasi digunakan.

Meskipun beberapa fitur di aplikasi Anda memerlukan akses lokasi, mungkin saja hanya beberapa di antaranya yang memerlukan akses lokasi latar belakang. Oleh karena itu, sebaiknya aplikasi Anda menjalankan permintaan inkremental untuk izin lokasi, yang meminta akses lokasi latar depan, lalu akses lokasi latar belakang. Dengan melakukan permintaan inkremental, Anda memberikan lebih banyak kontrol dan transparansi kepada pengguna karena mereka dapat lebih memahami fitur mana di aplikasi Anda yang memerlukan akses lokasi latar belakang.

Gambar 2 menunjukkan contoh aplikasi yang dirancang untuk menangani permintaan inkremental. Fitur "tampilkan lokasi saat ini" dan "rekomendasikan tempat-tempat terdekat" memerlukan akses lokasi latar depan. Namun, hanya fitur "rekomendasikan tempat-tempat terdekat", yang memerlukan akses lokasi latar belakang.

Tombol yang mengaktifkan akses lokasi latar depan
    diposisikan setengah layar dari tombol yang mengaktifkan lokasi
    latar belakang
Gambar 2. Kedua fitur tersebut memerlukan akses lokasi, tetapi hanya fitur "rekomendasikan tempat-tempat terdekat" yang memerlukan akses lokasi latar belakang.

Proses untuk melakukan permintaan inkremental adalah sebagai berikut:

  1. Pada awalnya, aplikasi Anda harus memandu pengguna ke fitur yang memerlukan akses lokasi latar depan, seperti fitur "berbagi lokasi" pada Gambar 1 atau fitur "tampilkan lokasi saat ini" pada Gambar 2.

    Sebaiknya Anda menonaktifkan akses pengguna ke fitur yang memerlukan akses lokasi latar belakang hingga aplikasi memiliki akses lokasi latar depan.

  2. Nantinya, jika pengguna menjelajahi fungsi yang memerlukan akses lokasi latar belakang, Anda dapat meminta akses lokasi latar belakang.

Meminta lokasi latar belakang

Gambar 3. Halaman setelan yang menyertakan opsi Izinkan sepanjang waktu, yang memberikan akses lokasi latar belakang.

Saat fitur di aplikasi Anda meminta lokasi latar belakang pada perangkat yang menjalankan Android 10 (API level 29), dialog izin sistem akan menyertakan opsi bernama Izinkan sepanjang waktu. Jika pengguna memilih opsi ini, fitur di aplikasi Anda akan mendapatkan akses lokasi latar belakang.

Di Android 11 (API level 30) dan yang lebih tinggi, dialog sistem tidak menyertakan opsi Izinkan sepanjang waktu. Sebaliknya, pengguna harus mengaktifkan lokasi latar belakang pada halaman setelan, seperti yang ditunjukkan pada Gambar 3.

Anda dapat membantu pengguna membuka halaman setelan ini dengan mengikuti praktik terbaik saat meminta izin lokasi latar belakang. Proses pemberian izin bergantung pada versi SDK target aplikasi.

Aplikasi menargetkan Android 11 atau yang lebih baru

Jika aplikasi Anda belum diberi izin ACCESS_BACKGROUND_LOCATION, dan shouldShowRequestPermissionRationale() menampilkan true, tampilkan UI edukasi kepada pengguna yang menyertakan informasi berikut:

  • Penjelasan lengkap tentang alasan fitur aplikasi memerlukan akses ke lokasi latar belakang.
  • Label opsi setelan yang dapat dibaca pengguna dan memberikan lokasi latar belakang (misalnya, label Izinkan sepanjang waktu dalam gambar 3). Anda dapat memanggil getBackgroundPermissionOptionLabel() untuk mendapatkan label ini. Nilai hasil dari metode ini dilokalkan ke preferensi bahasa perangkat pengguna.
  • Opsi bagi pengguna untuk menolak izin. Jika pengguna menolak akses lokasi latar belakang, mereka tetap harus dapat menggunakan aplikasi.
Pengguna dapat mengetuk notifikasi sistem untuk mengubah
  setelan lokasi untuk aplikasi
Gambar 4. Notifikasi mengingatkan pengguna bahwa mereka telah memberikan akses lokasi latar belakang ke suatu aplikasi.

Aplikasi yang menargetkan Android 10 atau yang lebih rendah

Saat fitur di aplikasi meminta akses lokasi latar belakang, pengguna akan melihat dialog sistem. Dialog ini menyertakan opsi untuk membuka opsi izin lokasi aplikasi di halaman setelan.

Selama aplikasi Anda sudah mengikuti praktik terbaik untuk meminta izin akses lokasi, Anda tidak perlu membuat perubahan untuk mendukung perilaku ini.

Pengingat pemberian akses lokasi latar belakang

Di Android 10 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 4.

Referensi lainnya

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

Video