Za pomocą interfejsów API usług lokalizacji Google Play aplikacja może poprosić o ostatnią znaną lokalizację 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 złożonego 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 położenia urządzenia za pomocą metody getLastLocation()
w połączonym dostawcy lokalizacji.
Konfigurowanie Usług Google Play
Aby uzyskać dostęp do dostawcy z połączoną lokalizacją, projekt deweloperski aplikacji musi zawierać Usługi Google Play. Pobierz i zainstaluj komponent usług Google Play za pomocą Menedżera pakietów SDK, a następnie 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ą prosić o dostęp do lokalizacji w zależności od zastosowań tych funkcji.
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ść zwracanej przez to wywołanie lokalizacji jest określana przez ustawienie uprawnień w pliku manifestu aplikacji, zgodnie z opisem w przewodniku Prośba o dostęp do lokalizacji.
Aby poprosić o ostatnią znaną lokalizację, wywołaj metodę getLastLocation()
. Ten fragment kodu ilustruje żądanie i proste przetwarzanie 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, co może być spowodowane tym, że jest to nowe urządzenie lub urządzenie, 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ąć tej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizacje 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 aplikacji. Informacje o lokalizacji mogą jednak być nieaktualne, jeśli żaden inny klient nie korzystał ostatnio z 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, i bezpieczniejszy niż alternatywne metody, takie jak inicjowanie 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.