Dzięki interfejsom API do lokalizacji Usług Google Play aplikacja może prosić o dostęp do ostatniej znanej lokalizacji urządzenia użytkownika. W większości przypadków interesuje Cię aktualna lokalizacja użytkownika, co zwykle jest równoznaczne z ostatnią znaną lokalizacją urządzenia.
Konkretnie mówiąc, możesz pobrać ostatnią znaną lokalizację urządzenia za pomocą dostawcy uśrednionej lokalizacji. Dostawca uśrednionej lokalizacji to jeden z interfejsów API lokalizacji w Usługach Google Play. Zarządza bazową technologią lokalizacji i udostępnia prosty interfejs API, dzięki któremu możesz określić wymagania na wysokim poziomie, np. o wysokiej dokładności lub małej mocy. Optymalizuje również wykorzystanie przez urządzenie energii baterii.
Uwaga: gdy Twoja aplikacja działa w tle, dostęp do lokalizacji powinien być istotny dla głównej funkcji aplikacji. Musisz im towarzyszyć odpowiednie powiadomienie.
Z tej lekcji dowiesz się, jak przesłać pojedyncze żądanie lokalizacji urządzenia, korzystając z metody getLastLocation()
w dostawcy uśrednionej lokalizacji.
Skonfiguruj Usługi Google Play
Aby można było korzystać z dostawcy uśrednionej lokalizacji, projekt deweloperski aplikacji musi obejmować Usługi Google Play. Pobierz i zainstaluj komponent Usługi Google Play za pomocą Menedżera pakietów SDK i dodaj bibliotekę do projektu. Szczegółowe informacje znajdziesz w przewodniku konfigurowania usług Google Play.
Określanie uprawnień aplikacji
Aplikacje, których funkcje korzystają z usług lokalizacyjnych, muszą poprosić o dostęp do lokalizacji w zależności od przypadków użycia tych funkcji.
Utwórz klienta usług lokalizacyjnych
W metodzie onCreate()
aktywności utwórz instancję klienta Fused Location Provider (jak pokazano poniżej).
Kotlin
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Java
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
Uzyskiwanie ostatniej znanej lokalizacji
Po utworzeniu klienta usług lokalizacyjnych możesz uzyskać ostatnią znaną lokalizację urządzenia użytkownika. Gdy Twoja aplikacja jest z nimi połączona, możesz użyć metody getLastLocation()
dostawcy uśrednionej lokalizacji, aby pobrać lokalizację urządzenia. Dokładność lokalizacji zwracanej przez to wywołanie zależy od ustawienia uprawnień w pliku manifestu aplikacji zgodnie z opisem w przewodniku dotyczącym wysyłania próśb o dostęp do lokalizacji.
Aby wysłać żądanie dotyczące ostatniej znanej lokalizacji, wywołaj metodę getLastLocation()
. Ten fragment kodu ilustruje żądanie i prostą obsługę odpowiedzi:
Kotlin
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
Java
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
Metoda getLastLocation()
zwraca wartość Task
, której można użyć do uzyskania obiektu Location
ze współrzędnymi szerokości i długości geograficznej lokalizacji geograficznej. Obiektem lokalizacji może być null
w tych sytuacjach:
- Lokalizacja jest wyłączona w ustawieniach urządzenia. Wynik może wyglądać tak:
null
nawet wtedy, gdy ostatnia lokalizacja została wcześniej pobrana, ponieważ wyłączenie lokalizacji powoduje też wyczyszczenie pamięci podręcznej. - Urządzenie nigdy nie zarejestrowało lokalizacji. Może to być nowe urządzenie lub urządzenie, na którym przywrócono ustawienia fabryczne.
- Usługi Google Play na urządzeniu zostały uruchomione ponownie i nie ma aktywnego klienta dostawcy uśrednionej lokalizacji, który zażądał lokalizacji po ponownym uruchomieniu usług. Aby uniknąć takiej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizacje lokalizacji. Więcej informacji znajdziesz w artykule Odbieranie aktualizacji lokalizacji.
Wybierz najlepszą orientacyjną lokalizację
FusedLocationProviderClient
udostępnia kilka metod pobierania informacji o lokalizacji urządzenia. Wybierz jedną z tych opcji w zależności od zastosowania aplikacji:
getLastLocation()
szybciej pobiera szacowaną lokalizację i minimalizuje wykorzystanie baterii, które można przypisać Twojej aplikacji. Informacje o lokalizacji mogą jednak być nieaktualne, jeśli żaden inny klient nie używał ostatnio lokalizacji.getCurrentLocation()
będzie regularnie otrzymywać bardziej aktualne i dokładne informacje o lokalizacji. Ta metoda może jednak powodować aktywne obliczanie lokalizacji na urządzeniuJest to zalecany sposób uzyskania nowej lokalizacji, o ile jest to możliwe. Jest bezpieczniejszy niż inne rozwiązania, takie jak samodzielne uruchamianie aktualizacji lokalizacji i zarządzanie nimi za pomocą
requestLocationUpdates()
. Jeśli aplikacja wywołuje funkcjęrequestLocationUpdates()
, może czasami zużywać dużo energii, gdy lokalizacja jest niedostępna lub żądanie nie jest prawidłowo zatrzymane po uzyskaniu nowej lokalizacji.
Dodatkowe materiały
Więcej informacji o pobieraniu bieżącej lokalizacji w Androidzie znajdziesz w tych materiałach:
Próbki
- Przykładowa aplikacja pokazująca sprawdzone metody podczas pobierania bieżącej lokalizacji.