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
-
- Gdy aplikacja działa w tle, wywołania zwrotne zarejestrowane do odbierania danych z funkcji
GnssMeasurement
iGnssNavigationMessage
przestają się wykonywać.
- Gdy aplikacja działa w tle, wywołania zwrotne zarejestrowane do odbierania danych z funkcji
- 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, klasaWifiManager
udostępni wyniki z pamięci podręcznej z poprzedniego skanowania.