Limity lokalizacji w tle

Aby zmniejszyć zużycie energii, Android 8.0 (poziom interfejsu API 26) ogranicza częstotliwość pobierania bieżącej lokalizacji użytkownika przez aplikację, gdy działa w tle. W tych warunkach aplikacje mogą aktualizować lokalizację tylko kilka razy na godzinę.

Uwaga: te ograniczenia dotyczą wszystkich aplikacji używanych na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub nowszym, niezależnie od docelowej wersji pakietu SDK.

Pobieranie lokalizacji jest szczególnie ważne, jeśli aplikacja działa w tle, gdy korzysta z alertów w czasie rzeczywistym lub wykrywania ruchu.

Działanie aplikacji na pierwszym planie jest zachowywane

Jeśli aplikacja działa na pierwszym planie na urządzeniu z Androidem 8.0 (poziom interfejsu API 26), aktualizowanie lokalizacji jest takie samo jak na Androidzie 7.1.1 (poziom API 25) i starszych.

Ostrzeżenie: jeśli przez długi czas aplikacja pobiera aktualizacje lokalizacji w czasie zbliżonym do rzeczywistego, żywotność baterii urządzenia znacznie się skróci.

Dostosowywanie działania aplikacji w zakresie lokalizacji

Zastanów się, czy aplikacja może działać w tle tylko wtedy, gdy rzadko się aktualizuje. W takiej sytuacji możesz częściej pobierać aktualizacje lokalizacji, wykonując jedną z tych czynności:

  • Umieść aplikację na pierwszym planie.
  • Uruchom w aplikacji usługę na pierwszym planie, wywołując startForegroundService(). Gdy taka usługa na pierwszym planie jest aktywna, jest wyświetlana jako powiadomienie o trwającym działaniu w obszarze powiadomień.

    Uwaga: jeśli aplikacja uruchomi usługę na pierwszym planie na urządzeniu z Androidem 11 (poziom interfejsu API 30) lub nowszym, nie będzie mogła uzyskać dostępu do informacji o lokalizacji, dopóki użytkownik nie przyzna aplikacji uprawnień ACCESS_BACKGROUND_LOCATION. Więcej informacji znajdziesz w wskazówkach dotyczących ograniczeń działania w trakcie użytkowania, które są powiązane z usługami na pierwszym planie.

  • Użyj elementów interfejsu Geofencing API, takich jak GeofencingClient, które są zoptymalizowane pod kątem minimalizacji zużycia energii.
  • Użyj pasywnego detektora lokalizacji, który może szybciej otrzymywać aktualizacje lokalizacji, jeśli aplikacje na pierwszym planie żądają aktualizacji lokalizacji szybciej.

Uwaga: jeśli aplikacja wymaga dostępu do historii lokalizacji, która zawiera częste aktualizacje, użyj wersji zbiorczej elementów interfejsu Fused LocationProvider API, takich jak interfejs FusedLocationProviderApi. Gdy aplikacja działa w tle, ten interfejs API otrzymuje lokalizację użytkownika częściej niż interfejs API niezbiorczy. Pamiętaj jednak, że aplikacja nadal otrzymuje aktualizacje partiami tylko kilka razy na godzinę.

Interfejsy API, których to dotyczy

Zmiany w działaniu pobierania informacji o lokalizacji w aplikacjach działających w tle mają wpływ na te interfejsy API:

Dostawca uśrednionej lokalizacji (FLP)
  • Jeśli aplikacja działa w tle, usługa systemu lokalizacji oblicza dla aplikacji nową lokalizację tylko kilka razy na godzinę. Dzieje się tak nawet wtedy, gdy aplikacja prosi o częstsze aktualizacje lokalizacji.

    Jednak jeśli użyjesz zbiorczej wersji FLP, będziesz mieć dostęp do częstszej historii lokalizacji po tym, jak aplikacja otrzyma aktualizację zbiorczą, która też powtarza się tylko kilka razy na godzinę.

  • Jeśli aplikacja działa na pierwszym planie, częstotliwość próbkowania lokalizacji nie zmieni się w porównaniu z Androidem 7.1.1 (poziom interfejsu API 25).
Geofencing
  • Aplikacje w tle mogą otrzymywać zdarzenia przejścia geofencingu częściej niż aktualizacje dostarczane przez dostawcę uśrednionej lokalizacji.
  • Średni czas reakcji na zdarzenie geofencingu to co kilka minut.
Pomiary GNSS i komunikaty nawigacyjne GNSS
Menedżer lokalizacji
  • Aktualizacje lokalizacji są dostarczane do aplikacji działających w tle tylko kilka razy na godzinę.

    Uwaga: jeśli Twoja aplikacja działa na urządzeniu z zainstalowanymi Usługami Google Play, zdecydowanie zalecamy skorzystanie z dostawcy uśrednionej lokalizacji (FLP).

Menedżer Wi-Fi
Metoda startScan() wykonuje pełne skanowanie aplikacji w tle tylko kilka razy na godzinę. Jeśli wkrótce potem aplikacja w tle wywoła tę metodę ponownie, klasa WifiManager będzie udostępniać w pamięci podręcznej wyniki poprzedniego skanowania.