W tej sekcji opisano kilka typowych scenariuszy gromadzenia lokalizacji oraz podano zalecenia dotyczące optymalnego korzystania z interfejsów API geofencingu i zbiorczej usługi lokalizacyjnej.
widoczne dla użytkownika lub aktualizacje na pierwszym planie.
Przykład: aplikacja do mapowania, która wymaga częstych, dokładnych aktualizacji z bardzo małą latencją. Wszystkie aktualizacje mają miejsce na pierwszym planie: użytkownik uruchamia aktywność, pobiera dane o lokalizacji, a potem po chwili ją zatrzymuje.
Użyj metody setPriority()
z wartością PRIORITY_HIGH_ACCURACY
lub PRIORITY_BALANCED_POWER_ACCURACY
.
Interwał określony w metodzie setInterval()
zależy od przypadku użycia: w przypadku scenariuszy w czasie rzeczywistym ustaw wartość na kilka sekund; w innych przypadkach ograniczaj się do kilku minut (zalecane jest ustawienie wartości co najmniej 2 minut, aby zminimalizować zużycie baterii).
Znajomość lokalizacji urządzenia
Przykład: aplikacja pogodowa chce poznać lokalizację urządzenia.
Użyj metody getLastLocation()
, która zwraca ostatnio dostępną lokalizację (w rzadkich przypadkach może być ona pusta). Ta metoda zapewnia prosty sposób na uzyskanie lokalizacji i nie wiąże się z kosztami związanymi z aktywnym żądaniem aktualizacji lokalizacji. Użyj w połączeniu z metodą isLocationAvailable()
, która zwraca true
, gdy lokalizacja zwracana przez getLastLocation()
jest w miarę aktualna.
Uruchamianie aktualizacji, gdy użytkownik znajduje się w określonej lokalizacji
Przykład: prośba o aktualizacje, gdy użytkownik znajduje się w określonej odległości od pracy, domu lub innej lokalizacji.
Używaj geofencingu w połączeniu z aktualizacjami dostawcy danych o lokalizacji. Wysyłaj żądanie aktualizacji, gdy aplikacja otrzyma sygnał wejścia do geoogrodzenia, i usuwaj je, gdy otrzyma sygnał wyjścia z geoogrodzenia. Dzięki temu aplikacja otrzymuje bardziej szczegółowe informacje o lokalizacji tylko wtedy, gdy użytkownik wejdzie do zdefiniowanej strefy.
Typowy proces w tym scenariuszu może obejmować wyświetlenie powiadomienia po przejściu przez geofence i uruchomienie aktywności zawierającej kod, który prosi o aktualizacje, gdy użytkownik kliknie powiadomienie.
Rozpoczynanie aktualizacji na podstawie stanu aktywności użytkownika
Przykład: proszenie o aktualizacje tylko wtedy, gdy użytkownik jedzie samochodem lub rowerem.
Używaj interfejsu Activity Recognition API w połączeniu z aktualizacjami dostawców lokalizacji. Proś o aktualizacje, gdy wykryjesz określoną aktywność, i usuń aktualizacje, gdy użytkownik przestanie wykonywać tę aktywność.
Typowy proces w tym przypadku może polegać na wyświetleniu powiadomienia o wykryciu aktywności i uruchomieniu aktywności zawierającej kod, który prosi o aktualizacje, gdy użytkownik kliknie powiadomienie.
Długotrwałe aktualizacje lokalizacji w tle powiązane z obszarami geograficznymi
Przykład: użytkownik chce otrzymywać powiadomienia, gdy urządzenie znajduje się w pobliżu sprzedawcy.
To świetny przykład zastosowania geofencingu. Ponieważ scenariusz prawie na pewno obejmuje lokalizację w tle, użyj metody addGeofences(GeofencingRequest, PendingIntent)
.
Skonfiguruj te opcje:
Jeśli śledzisz przejścia między kartami, użyj metody
setLoiteringDelay()
, podając wartość nie większą niż 5 minut.Użyj atrybutu
setNotificationResponsiveness()
, podając wartość około 5 minut. Jeśli jednak Twoja aplikacja może sobie poradzić z dodatnim opóźnieniem w odpowiedzi, rozważ użycie wartości około 10 minut.
Aplikacja może zarejestrować maksymalnie 100 geoogrodzeń naraz. W przypadku, gdy aplikacja chce śledzić dużą liczbę opcji sprzedawcy, może zarejestrować duży geofence (na poziomie miasta) i dynamicznie rejestrować mniejsze geofence (dla lokalizacji w mieście) dla sklepów znajdujących się w większym geofence. Gdy użytkownik wejdzie do dużego geoogrodzenia, dodaj mniejsze geoogrodzenia. Gdy opuści większe geoogrodzenia, usuń mniejsze geoogrodzenia i ponownie zarejestruj geoogrodzenia dla nowego obszaru.
Długotrwałe aktualizacje lokalizacji w tle bez widocznego komponentu aplikacji
Przykład: aplikacja, która pasywnie śledzi lokalizację
Jeśli to możliwe, używaj metody setPriority()
z opcją PRIORITY_NO_POWER
, ponieważ nie powoduje ona prawie żadnego zużycia baterii. Jeśli użycie PRIORITY_NO_POWER
jest niemożliwe, użyj PRIORITY_BALANCED_POWER_ACCURACY
lub PRIORITY_LOW_POWER
, ale unikaj używania PRIORITY_HIGH_ACCURACY
do ciągłej pracy w tle, ponieważ ta opcja znacznie zużywa baterię.
Jeśli potrzebujesz więcej danych o lokalizacji, użyj pasywnej lokalizacji, wywołując metodę setFastestInterval()
, przekazując mniejszą wartość niż ta, którą przekazujesz do metody setInterval()
. W połączeniu z opcją PRIORITY_NO_POWER
lokalizacja pasywna może okazjonalnie przekazywać lokalizację obliczoną przez inne aplikacje bez dodatkowych kosztów.
Zmniejsz częstotliwość wyświetlania reklam, dodając opóźnienie za pomocą metody setMaxWaitTime()
. Jeśli na przykład używasz metody setinterval()
z wartością około 10 minut, rozważ wywołanie metody setMaxWaitTime()
z wartością od 30 do 60 minut. Dzięki tym opcjom lokalizacja jest obliczana dla Twojej aplikacji mniej więcej co 10 minut, ale aplikacja jest aktywowana tylko co 30–60 minut, a niektóre dane o lokalizacji są dostępne w ramach aktualizacji zbiorczej. W tym podejściu opóźnienie jest zastępowane przez większą ilość dostępnych danych i lepszą wydajność baterii.
częste aktualizacje o wysokiej dokładności podczas interakcji z innymi aplikacjami;
Przykład: aplikacja do nawigacji lub fitnessu, która działa dalej, gdy użytkownik wyłączy ekran lub otworzy inną aplikację.
Użyj usługi na pierwszym planie. Jeśli Twoja aplikacja może wykonać kosztowne czynności w imieniu użytkownika, zalecamy poinformowanie go o tym. Usługa działająca na pierwszym planie wymaga stałego powiadomienia. Więcej informacji znajdziesz w artykule Omówienie powiadomień.