Optymalizacja wykorzystania lokalizacji na potrzeby rzeczywistych scenariuszy

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ń.