Za pomocą interfejsów API lokalizacji Usług Google Play aplikacja może prosić o podanie ostatniej znanej lokalizacji urządzenia użytkownika. W większości przypadków interesuje Cię aktualna lokalizacja użytkownika, która zwykle jest równoznaczna z ostatnią znaną lokalizacją urządzenia.
W szczególności używaj zjednoczonego dostawcy lokalizacji, aby pobrać ostatnią znaną lokalizację urządzenia. Złożony dostawca lokalizacji to jeden z interfejsów API lokalizacji w Usługach Google Play. Zarządza podstawową technologią lokalizacyjną i zapewnia prosty interfejs API, dzięki któremu możesz określać wymagania na wysokim poziomie, np. wysoką dokładność lub niskie zużycie energii. Optymalizuje też zużycie energii przez urządzenie.
Uwaga: gdy aplikacja działa w tle, dostęp do lokalizacji powinien być niezbędny do działania jej podstawowej funkcji i powinien być odpowiednio opisany w opisie aplikacji.
Z tej lekcji dowiesz się, jak wysłać pojedyncze żądanie dotyczące lokalizacji urządzenia za pomocą metody getLastLocation()
w połączonym dostawcy lokalizacji.
Konfigurowanie Usług Google Play
Aby można było uzyskać dostęp do dostawcy uśrednionej lokalizacji, projekt programisty aplikacji musi zawierać Usługi Google Play. Pobierz i zainstaluj komponent usług Google Play za pomocą Menedżera pakietów SDK, a potem dodaj bibliotekę do projektu. Szczegółowe informacje znajdziesz w przewodniku po konfigurowaniu Usług Google Play.
Określanie uprawnień aplikacji
Aplikacje, których funkcje korzystają z usług lokalizacyjnych, muszą poprosić o dostęp do lokalizacji zależnie od ich zastosowania.
Tworzenie klienta usług lokalizacyjnych
W metodzie onCreate()
aktywności utwórz instancję klienta dostawcy lokalizacji złączonej, jak pokazano w tym fragmencie kodu.
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); }
Pobieranie ostatniej znanej lokalizacji
Po utworzeniu klienta Usług lokalizacji możesz uzyskać ostatnią znaną lokalizację urządzenia użytkownika. Gdy aplikacja jest połączona z tymi usługami, możesz użyć metody getLastLocation()
dostawcy z połączonej lokalizacji, aby pobrać lokalizację urządzenia. Dokładność lokalizacji zwracanej przez to wywołanie zależy od ustawienia uprawnień umieszczonego w manifeście aplikacji zgodnie z opisem w przewodniku wysyłania próśb o dostęp do lokalizacji.
Aby poprosić o ostatnią znaną lokalizację, 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 obiekt Task
, którego można użyć do uzyskania obiektu Location
ze współrzędnymi szerokości i długości geograficznej lokalizacji geograficznej. Obiekt lokalizacji może być null
w tych sytuacjach:
- Lokalizacja jest wyłączona w ustawieniach urządzenia. W efekcie
null
może wystąpić 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 swojej lokalizacji. Może to być spowodowane nowym urządzeniem lub urządzeniem, które zostało przywrócone do ustawień fabrycznych.
- Usługi Google Play na urządzeniu zostały ponownie uruchomione i nie ma aktywnego klienta Fused Location Provider, który poprosił o lokalizację po ponownym uruchomieniu usług. Aby uniknąć takiej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizację lokalizacji. Więcej informacji znajdziesz w artykule Otrzymywanie aktualizacji lokalizacji.
Wybieranie najlepszego oszacowania lokalizacji
FusedLocationProviderClient
udostępnia kilka metod pobierania informacji o lokalizacji urządzenia. W zależności od przypadku użycia aplikacji wybierz jedną z tych opcji:
getLastLocation()
szybciej uzyskuje szacowaną lokalizację i minimalizuje zużycie baterii, które można przypisać do Twojej aplikacji. Informacje o lokalizacji mogą jednak być nieaktualne, jeśli żaden inny klient nie używał ostatnio lokalizacji.getCurrentLocation()
otrzymuje bardziej aktualną i dokładną lokalizację w bardziej spójny sposób. Ta metoda może jednak spowodować, że na urządzeniu będzie wykonywane aktywne obliczanie lokalizacji.Jest to zalecany sposób na uzyskanie nowej lokalizacji, o ile jest to możliwe. Jest on bezpieczniejszy niż alternatywne metody, takie jak uruchamianie i zarządzanie aktualizacjami lokalizacji za pomocą
requestLocationUpdates()
. Jeśli Twoja aplikacja wywołuje funkcjęrequestLocationUpdates()
, może czasami zużywać duże ilości energii, jeśli lokalizacja jest niedostępna lub jeśli żą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:
Próbki
- Przykładowa aplikacja, która demonstruje sprawdzone metody pobierania bieżącej lokalizacji.