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 odpowiada ostatniej znanej lokalizacji urządzenia.

W szczególności użyj dostawcy uśrednionej lokalizacji, aby pobrać ostatnią znaną lokalizację urządzenia. Dostawca uśrednionej lokalizacji to jeden z interfejsów API lokalizacji w usługach Google Play. Zarządza on podstawową technologią lokalizacji i udostępnia prosty interfejs API, dzięki któremu możesz określić wymagania na wysokim poziomie, takie jak wysoka dokładność czy 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 funkcjonalności i powinien być odpowiednio wyjaśniony użytkownikom.

Z tej lekcji dowiesz się, jak wysłać pojedyncze żądanie lokalizacji urządzenia za pomocą metody getLastLocation() w dostawcy uśrednionej lokalizacji.

Konfigurowanie usług Google Play

Aby uzyskać dostęp do dostawcy uśrednionej lokalizacji, projekt aplikacji musi obejmować Usługi Google Play. Pobierz i zainstaluj komponent usług Google Play za pomocą SDK Managera i 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 wykorzystujących lokalizację, 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 uśrednionej lokalizacji, 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);
}

Sprawdzanie 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 uśrednionej 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 wysyłania próśb o dostęp 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 szerokości i długości geograficznej położenia geograficznego. Obiekt lokalizacji może mieć wartość null w tych sytuacjach:

  • Lokalizacja jest wyłączona w ustawieniach urządzenia. Wynikiem może być null, nawet jeśli 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 mieć miejsce w przypadku nowego urządzenia lub urządzenia, 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 uśrednionej lokalizacji, który zażądałby lokalizacji po ponownym uruchomieniu usług. Aby uniknąć tej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o informacje o zmianie lokalizacji. Więcej informacji znajdziesz w artykule Żądanie informacji o zmianie lokalizacji.

Wybieranie najlepszego oszacowania 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ć aplikacji. Informacje o lokalizacji mogą być jednak nieaktualne, jeśli żaden inny klient nie korzystał ostatnio aktywnie z lokalizacji.
  • getCurrentLocation() będzie otrzymywać bardziej aktualne i dokładne informacje o lokalizacji. Ta metoda może jednak spowodować, że na urządzeniu będzie aktywnie obliczana lokalizacja,

    Jest to zalecany sposób uzyskiwania aktualnej lokalizacji, gdy jest to możliwe, i jest bezpieczniejszy niż alternatywne rozwiązania, takie jak samodzielne rozpoczynanie i zarządzanie informacjami o zmianie lokalizacji za pomocą requestLocationUpdates(). Jeśli aplikacja wywołuje metodę requestLocationUpdates(), może czasami zużywać duże ilości energii, gdy lokalizacja jest niedostępna lub gdy żą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:

Przykłady