Batas Lokasi Latar Belakang

Sebagai upaya untuk mengurangi konsumsi daya, Android 8.0 (API level 26) membatasi seberapa sering aplikasi dapat mengambil lokasi pengguna saat ini ketika aplikasi berjalan di latar belakang. Dalam kondisi ini, aplikasi hanya dapat menerima pembaruan lokasi beberapa kali setiap jam.

Catatan: Batasan ini berlaku untuk semua aplikasi yang digunakan pada perangkat yang menjalankan Android 8.0 (API level 26) atau versi lebih tinggi, apa pun versi SDK target aplikasinya.

Perilaku pengambilan lokasi ini sangat penting untuk diingat jika aplikasi Anda mengandalkan notifikasi real-time atau deteksi gerakan saat berjalan di latar belakang.

Perilaku aplikasi latar depan dipertahankan

Jika aplikasi berada di latar depan pada perangkat yang menjalankan Android 8.0 (API level 26), perilaku pembaruan lokasi akan sama seperti pada Android 7.1.1 (API level 25) dan yang lebih rendah.

Peringatan: Jika aplikasi Anda mengambil update lokasi hampir real-time dalam jangka waktu lama, masa pakai baterai perangkat akan jauh lebih singkat.

Menyempurnakan perilaku lokasi aplikasi

Pertimbangkan apakah kasus penggunaan aplikasi Anda untuk berjalan di latar belakang tidak dapat berhasil sama sekali jika aplikasi tidak sering menerima update lokasi. Jika demikian, Anda dapat lebih sering mengambil pembaruan lokasi dengan melakukan salah satu tindakan berikut:

  • Bawa aplikasi Anda ke latar depan.
  • Mulai layanan latar depan di aplikasi Anda dengan memanggil startForegroundService(). Saat layanan latar depan tersebut aktif, layanan akan muncul sebagai notifikasi yang sedang berlangsung di area notifikasi.

    Perhatian: Jika aplikasi Anda memulai layanan latar depan saat berjalan di latar belakang pada perangkat yang menjalankan Android 11 (API level 30) atau yang lebih tinggi, aplikasi Anda tidak dapat mengakses informasi lokasi kecuali pengguna telah memberikan izin ACCESS_BACKGROUND_LOCATION ke aplikasi Anda. Untuk informasi selengkapnya, lihat panduan tentang pembatasan saat digunakan yang terkait dengan layanan latar depan.

  • Gunakan elemen Geofencing API, seperti GeofencingClient, yang dioptimalkan untuk meminimalkan penggunaan daya.
  • Gunakan pemroses lokasi pasif, yang dapat menerima pembaruan lokasi lebih cepat jika ada aplikasi latar depan yang meminta pembaruan lokasi dengan kecepatan yang lebih tinggi.

Catatan: Jika aplikasi memerlukan akses ke histori lokasi yang berisi update frekuensi waktu, gunakan versi batch dari elemen Fused Location Provider API, seperti antarmuka FusedLocationProviderApi. Saat aplikasi Anda berjalan di latar belakang, API ini akan menerima lokasi pengguna lebih sering daripada API non-batch. Namun, perlu diingat bahwa aplikasi Anda masih menerima update dalam batch hanya beberapa kali setiap jam.

API yang terpengaruh

Perubahan pada perilaku pengambilan lokasi di aplikasi latar belakang memengaruhi API berikut:

Penyedia Lokasi Gabungan (FLP)
  • Jika aplikasi Anda berjalan di latar belakang, layanan sistem lokasi menghitung lokasi baru untuk aplikasi Anda hanya beberapa kali setiap jam. Hal ini terus berlaku bahkan ketika aplikasi Anda meminta update lokasi yang lebih sering.

    Namun, dengan menggunakan versi batch FLP, Anda memiliki akses ke lebih banyak histori lokasi frekuensi waktu setelah aplikasi menerima update batch, yang juga terjadi hanya beberapa kali setiap jam.

  • Jika aplikasi Anda berjalan di latar depan, tidak ada perubahan frekuensi sampling lokasi dibandingkan dengan Android 7.1.1 (API level 25).
Pembatasan wilayah
  • Aplikasi latar belakang bisa menerima peristiwa transisi pembatasan wilayah lebih sering daripada update dari Fused Location Provider.
  • Responsivitas rata-rata untuk peristiwa pembatasan wilayah adalah setiap beberapa menit.
Pengukuran GNSS dan Pesan Navigasi GNSS
Pengelola Lokasi
  • Pembaruan lokasi diberikan untuk aplikasi latar belakang hanya beberapa kali setiap jam.

    Catatan: Jika aplikasi Anda berjalan di perangkat yang telah diinstal layanan Google Play, Anda sangat disarankan untuk menggunakan Fused Location Provider (FLP).

Pengelola Wi-Fi
Metode startScan() melakukan pemindaian penuh untuk aplikasi latar belakang hanya beberapa kali setiap jam. Jika aplikasi latar belakang memanggil lagi metode tersebut tidak lama setelah itu, class WifiManager akan menyediakan hasil yang telah di-cache dari pemindaian sebelumnya.