Uzyskiwanie ostatniej znanej lokalizacji

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 zwykle jest równa ostatniej znanej lokalizacji urządzenia.

W szczególności 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 któremu możesz określać wymagania na wysokim poziomie, np. wysoką dokładność lub niskie zużycie energii. Optymalizuje też wykorzystanie baterii urządzenia.

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 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 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 lokalizacji z fuzją, 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ćnull 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ć 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ższe i dokładniejsze dane o lokalizacji. Ta metoda może jednak powodować, że aktywne obliczanie lokalizacji będzie odbywać się 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