Za pomocą interfejsów API lokalizacji Usług Google Play aplikacja może poprosić o ostatnią znaną lokalizację urządzenia użytkownika. W większości przypadków interesuje Cię bieżąca lokalizacja użytkownika, która zwykle odpowiada ostatniej znanej lokalizacji urządzenia.
W szczególności użyj dostawcy uśrednionej lokalizacji, aby pobrać ostatnią znaną lokalizację urządzenia. Dostawca uśrednionej lokalizacji to jeden z interfejsów API lokalizacji w usługach Google Play. Zarządza on podstawową technologią lokalizacji i udostępnia interfejs API, dzięki któremu możesz określić wymagania na wysokim poziomie, takie jak wysoka dokładność czy niskie zużycie energii. Optymalizuje też wykorzystanie baterii przez urządzenie.
Z tej lekcji dowiesz się, jak wysłać pojedyncze żądanie lokalizacji urządzenia za pomocą metody getLastLocation() w dostawcy uśrednionej lokalizacji.
Konfigurowanie Usług Google Play
Aby uzyskać dostęp do dostawcy uśrednionej lokalizacji, projekt aplikacji musi zawierać Usługi Google Play. Pobierz i zainstaluj komponent usług Google Play za pomocą SDK Managera i dodaj bibliotekę do projektu. Szczegółowe informacje znajdziesz w przewodniku Konfigurowanie Usług Google Play.
Określanie uprawnień aplikacji
Aplikacje, których funkcje korzystają z usług lokalizacyjnych, muszą prosić o dostęp do lokalizacji w zależności od przypadków użycia tych funkcji.
Tworzenie klienta usług lokalizacyjnych
W metodzie onCreate() aktywności utwórz instancję klienta dostawcy uśrednionej lokalizacji, jak pokazano w tym fragmencie kodu.
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Sprawdzanie ostatniej znanej lokalizacji
Po utworzeniu klienta usług lokalizacyjnych możesz uzyskać ostatnią znaną lokalizację urządzenia użytkownika. Użyj metody getLastLocation() dostawcy uśrednionej lokalizacji, aby pobrać lokalizację urządzenia. Dokładność lokalizacji zwracanej przez to wywołanie jest określana przez ustawienie uprawnień w pliku manifestu aplikacji, zgodnie z opisem w przewodniku dotyczącym próśb o przyznanie uprawnień dostępu do lokalizacji.
Aby poprosić o ostatnią znaną lokalizację, wywołaj metodę getLastLocation().
Poniższy fragment kodu ilustruje żądanie i podstawową obsługę odpowiedzi:
fusedLocationClient.lastLocation .addOnSuccessListener { location: Location? -> // Got last known location. In some rare situations this can be null. }
Metoda getLastLocation() zwraca obiekt Task, którego możesz użyć do uzyskania obiektu Location ze współrzędnymi geograficznymi (szerokością i długością geograficzną) położenia geograficznego. Obiekt lokalizacji może być null w tych sytuacjach:
- Lokalizacja jest wyłączona w ustawieniach urządzenia. Wynikiem może być
null, nawet jeśli ostatnia lokalizacja została wcześniej pobrana, ponieważ wyłączenie lokalizacji powoduje też wyczyszczenie pamięci podręcznej. - Urządzenie nigdy nie zarejestrowało swojej lokalizacji, co może mieć miejsce w przypadku nowego urządzenia lub urządzenia, które zostało przywrócone do ustawień fabrycznych.
- Usługi Google Play na urządzeniu zostały uruchomione ponownie i nie ma aktywnego klienta dostawcy uśrednionej lokalizacji, który zażądałby lokalizacji po ponownym uruchomieniu usług. Aby uniknąć tej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o informacje o zmianie lokalizacji. Więcej informacji znajdziesz w artykule Żądanie informacji o zmianie lokalizacji.
Wybieranie najlepszego oszacowania lokalizacji
FusedLocationProviderClient udostępnia kilka metod pobierania informacji o lokalizacji urządzenia. Wybierz jedną z tych opcji w zależności od przypadku użycia aplikacji:
getLastLocation()szybciej uzyskuje szacunkową lokalizację i minimalizuje zużycie baterii, które można przypisać aplikacji. Informacje o lokalizacji mogą być jednak nieaktualne, jeśli żaden inny klient nie korzystał ostatnio aktywnie z lokalizacji.getCurrentLocation()będzie częściej otrzymywać aktualniejsze i dokładniejsze informacje o lokalizacji. Ta metoda może jednak spowodować, że na urządzeniu będzie obliczana aktywna lokalizacja.Jest to zalecany sposób uzyskiwania aktualnej lokalizacji, gdy jest to możliwe, i jest bezpieczniejszy niż alternatywne rozwiązania, takie jak samodzielne rozpoczynanie i zarządzanie informacjami o zmianie lokalizacji za pomocą
requestLocationUpdates(). Jeśli aplikacja wywołujerequestLocationUpdates(), może czasami zużywać duże ilości energii, gdy lokalizacja jest niedostępna lub gdy żądanie nie zostanie prawidłowo zatrzymane po uzyskaniu nowej lokalizacji.
Dodatkowe materiały
Więcej informacji o pobieraniu bieżącej lokalizacji na Androidzie znajdziesz w tych materiałach:
Przykłady
- Przykładowa aplikacja pokazująca sprawdzone metody pobierania bieżącej lokalizacji.