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ę bieżąca lokalizacja użytkownika, co zwykle odpowiada ostatniej znanej lokalizacji urządzenia.
W szczególności należy użyć dostawcy uśrednionej lokalizacji do pobrania ostatniej znanej lokalizacji urządzenia. Dostawca uśrednionej lokalizacji to jeden z interfejsów API lokalizacji w Usługach Google Play. Ta funkcja zarządza bazową technologią lokalizacyjną i udostępnia prosty interfejs API, dzięki czemu możesz określać wymagania ogólne, takie jak wysoka dokładność lub mała moc. Optymalizuje też wykorzystanie baterii przez urządzenie.
Uwaga: gdy aplikacja działa w tle, dostęp do lokalizacji powinien mieć kluczowe znaczenie dla jej głównej funkcjonalności, a użytkownicy muszą mieć dostęp do odpowiednich informacji.
Z tej lekcji dowiesz się, jak wysłać jedno żądanie lokalizacji urządzenia za pomocą metody getLastLocation()
w dostawcy uśrednionej 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 Konfigurowanie 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.
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); }
Pobierz ostatnią znaną lokalizację
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ń 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ć, aby uzyskać obiekt Location
ze współrzędnymi szerokości i długości geograficznej lokalizacji geograficznej. Obiekt lokalizacji może mieć wartość null
w tych sytuacjach:
- Lokalizacja jest wyłączona w ustawieniach urządzenia. Wynik może mieć wartość
null
nawet wtedy, gdy ostatnia lokalizacja została wcześniej pobrana, ponieważ wyłączenie lokalizacji powoduje 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ąć tej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizację lokalizacji. Więcej informacji znajdziesz w sekcji Odbieranie aktualizacji lokalizacji.
Wybierz najlepszą szacowaną lokalizację
FusedLocationProviderClient
udostępnia kilka metod pobierania informacji o lokalizacji urządzenia. W zależności od zastosowania aplikacji wybierz jedną z tych opcji:
getLastLocation()
szybciej uzyskuje oszacowanie lokalizacji i minimalizuje wykorzystanie baterii, które można przypisać aplikacji. Jeśli jednak żaden inny klient nie korzystał ostatnio aktywnie z informacji o lokalizacji, informacje o lokalizacji mogą być nieaktualne.getCurrentLocation()
otrzymuje bardziej aktualną i dokładniejszą lokalizację. Ta metoda może jednak spowodować obliczenie aktywnej lokalizacji na urządzeniuJest to zalecany sposób, gdy tylko jest to możliwe, i bezpieczniejszy niż samodzielne uruchamianie aktualizacji lokalizacji i zarządzanie nią za pomocą usługi
requestLocationUpdates()
. Jeśli aplikacja wywołujerequestLocationUpdates()
, może zużywać dużo energii, gdy lokalizacja jest niedostępna lub gdy żądanie nie zostanie poprawnie 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 pokazuje sprawdzone metody podczas pobierania bieżącej lokalizacji.