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ę bieżąca lokalizacja użytkownika, co zwykle odpowiada ostatniej znanej lokalizacji urządzenia.

W szczególności należy użyć dostawcy uśrednionej lokalizacji do pobrania ostatniej znanej lokalizacji urządzenia. Dostawca uśrednionej lokalizacji to jeden z interfejsów API lokalizacji w Usługach Google Play. Ta funkcja zarządza bazową technologią lokalizacyjną i udostępnia prosty interfejs API, dzięki czemu możesz określać wymagania ogólne, takie jak wysoka dokładność lub mała moc. Optymalizuje też wykorzystanie baterii przez urządzenie.

Uwaga: gdy aplikacja działa w tle, dostęp do lokalizacji powinien mieć kluczowe znaczenie dla jej głównej funkcjonalności, a użytkownicy muszą mieć dostęp do odpowiednich informacji.

Z tej lekcji dowiesz się, jak wysłać jedno żądanie lokalizacji urządzenia za pomocą metody getLastLocation() w dostawcy uśrednionej 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 Konfigurowanie 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.

Utwórz klienta usług lokalizacyjnych

W metodzie onCreate() aktywności utwórz instancję klienta Fused Location Provider, jak pokazano poniżej.

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);
}

Pobierz ostatnią znaną lokalizację

Po utworzeniu klienta usług lokalizacyjnych możesz uzyskać ostatnią znaną lokalizację urządzenia użytkownika. Gdy Twoja aplikacja jest z nimi połączona, 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ń 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ć, aby uzyskać obiekt Location ze współrzędnymi szerokości i długości geograficznej lokalizacji geograficznej. Obiekt lokalizacji może mieć wartość null w tych sytuacjach:

  • Lokalizacja jest wyłączona w ustawieniach urządzenia. Wynik może mieć wartość null nawet wtedy, gdy ostatnia lokalizacja została wcześniej pobrana, ponieważ wyłączenie lokalizacji powoduje 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ąć tej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizację lokalizacji. Więcej informacji znajdziesz w sekcji Odbieranie aktualizacji lokalizacji.

Wybierz najlepszą szacowaną lokalizację

FusedLocationProviderClient udostępnia kilka metod pobierania informacji o lokalizacji urządzenia. W zależności od zastosowania aplikacji wybierz jedną z tych opcji:

  • getLastLocation() szybciej uzyskuje oszacowanie lokalizacji i minimalizuje wykorzystanie baterii, które można przypisać aplikacji. Jeśli jednak żaden inny klient nie korzystał ostatnio aktywnie z informacji o lokalizacji, informacje o lokalizacji mogą być nieaktualne.
  • getCurrentLocation() otrzymuje bardziej aktualną i dokładniejszą lokalizację. Ta metoda może jednak spowodować obliczenie aktywnej lokalizacji na urządzeniu

    Jest to zalecany sposób, gdy tylko jest to możliwe, i bezpieczniejszy niż samodzielne uruchamianie aktualizacji lokalizacji i zarządzanie nią za pomocą usługi requestLocationUpdates(). Jeśli aplikacja wywołuje requestLocationUpdates(), może zużywać dużo energii, gdy lokalizacja jest niedostępna lub gdy żądanie nie zostanie poprawnie 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