Korzystając z 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 jest zwykle równa ostatniej znanej lokalizacji urządzenia.
W tym celu użyj zintegrowanego dostawcy lokalizacji, aby pobrać ostatnią znaną lokalizację urządzenia. Połączony dostawca lokalizacji to jeden z interfejsów API lokalizacji w usługach Google Play. Zarządza ona podstawową technologią lokalizacji i udostępnia prosty interfejs API, dzięki czemu możesz określać wymagania na wysokim poziomie, np. wysoką dokładność lub niskie zużycie energii. Optymalizuje też wykorzystanie baterii przez urządzenie.
Uwaga: gdy aplikacja działa w tle, dostęp do lokalizacji powinien być niezbędny do działania jej głównej funkcji i powinien być odpowiednio wyjaśniony użytkownikom.
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 uzyskać dostęp do połączonego dostawcy lokalizacji, projekt deweloperski aplikacji musi zawierać Usługi Google Play. Pobierz i zainstaluj komponent usług Google Play za pomocą Menedżera pakietów SDK i 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 przyznanie dostępu 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 lokalizacji Fused Location Provider Client, 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 lokalizacyjnych 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 połączonej 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 na temat prośby o uprawnienia do lokalizacji.
Aby poprosić o ostatnią znaną lokalizację, wywołaj metodę getLastLocation(). Poniższy 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żesz użyć do uzyskania obiektu Location ze współrzędnymi geograficznymi (szerokością i długością geograficzną) lokalizacji. Obiekt lokalizacji może mieć wartość null w tych sytuacjach:
- Lokalizacja jest wyłączona w ustawieniach urządzenia. Może to nastąpićnullnawet 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ć 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 dostawcy lokalizacji, który po ponownym uruchomieniu usług poprosił o lokalizację. Aby uniknąć tej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizacje lokalizacji. Więcej informacji znajdziesz w artykule Żądanie aktualizacji lokalizacji.
Wybierz najlepsze oszacowanie 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ć do Twojej aplikacji. Informacje o lokalizacji mogą być jednak nieaktualne, jeśli żaden inny klient nie korzystał ostatnio aktywnie z lokalizacji.
- getCurrentLocation()uzyskuje świeższą i dokładniejszą lokalizację w sposób bardziej spójny. Ta metoda może jednak powodować obliczanie aktywnej lokalizacji na urządzeniu.- Jest to zalecany sposób na uzyskanie aktualnej lokalizacji, gdy tylko jest to możliwe. Jest on bezpieczniejszy niż alternatywne metody, takie jak samodzielne uruchamianie i zarządzanie aktualizacjami lokalizacji za pomocą - requestLocationUpdates(). Jeśli 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 aktualnej lokalizacji.
Dodatkowe materiały
Więcej informacji o pobieraniu bieżącej lokalizacji na Androidzie znajdziesz w tych materiałach:
Próbki
- Przykładowa aplikacja pokazująca sprawdzone metody pobierania bieżącej lokalizacji.
