Limity dostępu do lokalizacji w tle

Aby ograniczyć zużycie energii, Android 8.0 (poziom interfejsu API 26) ogranicza częstotliwość pobierania przez aplikację bieżącej lokalizacji użytkownika, gdy aplikacja działa w tle. W takich warunkach aplikacje mogą otrzymywać aktualizacje lokalizacji 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 aplikacji.

Warto pamiętać o tym zachowaniu podczas pobierania lokalizacji, jeśli aplikacja korzysta z alertów w czasie rzeczywistym lub wykrywania ruchu podczas działania w tle.

Zachowanie aplikacji działającej w pierwszym planie jest zachowane

Jeśli aplikacja jest na pierwszym planie na urządzeniu z Androidem 8.0 (poziom interfejsu API 26), zachowanie aktualizacji lokalizacji jest takie samo jak w przypadku Androida 7.1.1 (poziom interfejsu API 25) lub starszego.

Ostrzeżenie: jeśli aplikacja przez długi czas pobiera aktualizacje lokalizacji w czasie rzeczywistym, czas pracy baterii urządzenia znacznie się skróci.

Dostosowywanie zachowania aplikacji dotyczącego lokalizacji

Zastanów się, czy przypadki użycia aplikacji działającej w tle mogą się nie udać, jeśli aplikacja otrzymuje rzadkie aktualizacje lokalizacji. W takim przypadku możesz częściej pobierać aktualizacje lokalizacji, wykonując jedną z tych czynności:

  • Przenieś aplikację na pierwszy plan.
  • Uruchom usługę na pierwszym planie w aplikacji, wywołując funkcję startForegroundService(). Gdy taka usługa na pierwszym planie jest aktywna, pojawia się jako ciągłe powiadomienie w obszarze powiadomień.

    Uwaga: jeśli aplikacja uruchamia usługę na pierwszym planie podczas działania w tle na urządzeniu z Androidem 11 (poziom interfejsu API 30) lub nowszym, nie może uzyskać dostępu do informacji o lokalizacji, chyba że użytkownik przyznał jej uprawnienie ACCESS_BACKGROUND_LOCATION. Więcej informacji znajdziesz w wskazówkach dotyczących ograniczeń podczas używania, które są związane z usługami na pierwszym planie.

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

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

Interfejsy API, których dotyczy zalecenie

Zmiany zachowania podczas pobierania lokalizacji w aplikacjach działających w tle wpływają na te interfejsy API:

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

    Korzystając z  wersji zbiorczej FLP, masz dostęp do bardziej szczegółowej historii lokalizacji po tym, jak aplikacja otrzyma aktualizację zbiorczą, która również występuje tylko kilka razy na godzinę.

  • Jeśli aplikacja działa na pierwszym planie, częstotliwość próbkowania lokalizacji nie ulegnie zmianie w porównaniu z Androidem 7.1.1 (poziom interfejsu API 25).
Geofencing
  • Aplikacje działające w tle mogą otrzymywać zdarzenia przejścia geofencingu częściej niż aktualizacje od dostawcy zjednoczonej lokalizacji.
  • Średnia częstotliwość reagowania na zdarzenie geofencingu to co kilka minut.
Pomiary GNSS i wiadomości nawigacyjne GNSS
Menedżer lokalizacji
  • Aktualizacje lokalizacji są udostępniane aplikacjom działającym w tle tylko kilka razy na godzinę.

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

Menedżer Wi-Fi
Metoda startScan() wykonuje pełne skanowanie aplikacji działających w tle tylko kilka razy na godzinę. Jeśli aplikacja działająca w tle wywoła metodę ponownie w krótkim czasie, klasa WifiManager udostępni wyniki z pamięci podręcznej z poprzedniego skanowania.