Uzyskiwanie ostatniej znanej lokalizacji

Dzięki interfejsom API do lokalizacji Usług Google Play aplikacja może prosić o dostęp do ostatniej znanej lokalizacji urządzenia użytkownika. W większości przypadków interesuje Cię aktualna lokalizacja użytkownika, co zwykle jest równoznaczne z ostatnią znaną lokalizacją urządzenia.

Konkretnie mówiąc, możesz pobrać ostatnią znaną lokalizację urządzenia za pomocą dostawcy uśrednionej lokalizacji. Dostawca uśrednionej lokalizacji to jeden z interfejsów API lokalizacji w Usługach Google Play. Zarządza bazową technologią lokalizacji i udostępnia prosty interfejs API, dzięki któremu możesz określić wymagania na wysokim poziomie, np. o wysokiej dokładności lub małej mocy. Optymalizuje również wykorzystanie przez urządzenie energii baterii.

Uwaga: gdy Twoja aplikacja działa w tle, dostęp do lokalizacji powinien być istotny dla głównej funkcji aplikacji. Musisz im towarzyszyć odpowiednie powiadomienie.

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

Skonfiguruj Usługi Google Play

Aby można było korzystać z dostawcy uśrednionej lokalizacji, projekt deweloperski aplikacji musi obejmować Usługi Google Play. Pobierz i zainstaluj komponent Usługi Google Play za pomocą Menedżera pakietów SDK i dodaj bibliotekę do projektu. Szczegółowe informacje znajdziesz w przewodniku konfigurowania usług Google Play.

Określanie uprawnień aplikacji

Aplikacje, których funkcje korzystają z usług lokalizacyjnych, muszą poprosić o dostęp do lokalizacji w zależności od przypadków użycia tych funkcji.

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

Uzyskiwanie ostatniej znanej lokalizacji

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ń w pliku manifestu aplikacji zgodnie z opisem w przewodniku dotyczącym wysyłania próśb o dostęp do lokalizacji.

Aby wysłać żądanie dotyczące ostatniej znanej lokalizacji, 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 wartość Task, której można użyć do uzyskania obiektu Location ze współrzędnymi szerokości i długości geograficznej lokalizacji geograficznej. Obiektem lokalizacji może być null w tych sytuacjach:

  • Lokalizacja jest wyłączona w ustawieniach urządzenia. Wynik może wyglądać tak: 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 lokalizacji. Może to być nowe urządzenie lub urządzenie, na którym przywrócono ustawienia fabryczne.
  • Usługi Google Play na urządzeniu zostały uruchomione ponownie i nie ma aktywnego klienta dostawcy uśrednionej lokalizacji, który zażądał lokalizacji po ponownym uruchomieniu usług. Aby uniknąć takiej sytuacji, możesz utworzyć nowego klienta i samodzielnie poprosić o aktualizacje lokalizacji. Więcej informacji znajdziesz w artykule Odbieranie aktualizacji lokalizacji.

Wybierz najlepszą orientacyjną lokalizację

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

  • getLastLocation() szybciej pobiera szacowaną lokalizację i minimalizuje wykorzystanie baterii, które można przypisać Twojej aplikacji. Informacje o lokalizacji mogą jednak być nieaktualne, jeśli żaden inny klient nie używał ostatnio lokalizacji.
  • getCurrentLocation() będzie regularnie otrzymywać bardziej aktualne i dokładne informacje o lokalizacji. Ta metoda może jednak powodować aktywne obliczanie lokalizacji na urządzeniu

    Jest to zalecany sposób uzyskania nowej lokalizacji, o ile jest to możliwe. Jest bezpieczniejszy niż inne rozwiązania, takie jak samodzielne uruchamianie aktualizacji lokalizacji i zarządzanie nimi za pomocą requestLocationUpdates(). Jeśli aplikacja wywołuje funkcję requestLocationUpdates(), może czasami zużywać dużo energii, gdy lokalizacja jest niedostępna lub żądanie nie jest prawidłowo zatrzymane po uzyskaniu nowej lokalizacji.

Dodatkowe materiały

Więcej informacji o pobieraniu bieżącej lokalizacji w Androidzie znajdziesz w tych materiałach:

Próbki