Uzyskiwanie ostatniej znanej lokalizacji

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ę aktualna lokalizacja użytkownika, która zwykle jest równoznaczna z ostatnią znaną lokalizacją urządzenia.

W szczególności używaj zjednoczonego 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 dotyczące lokalizacji urządzenia za pomocą metody getLastLocation() w połączonym dostawcy 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 po konfigurowaniu 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.

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ść 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ć 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. 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ąć takiej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizację 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 Twojej aplikacji. Informacje o lokalizacji mogą jednak być nieaktualne, jeśli żaden inny klient nie używał ostatnio 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. Jest on bezpieczniejszy niż alternatywne metody, takie jak uruchamianie 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