Uzyskiwanie ostatniej znanej lokalizacji

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