Letzten bekannten Standort abrufen

Mithilfe der Standort-APIs der Google Play-Dienste kann deine App den letzten bekannten Standort des Nutzergeräts anfordern. In den meisten Fällen ist für Sie der aktuelle Standort des Nutzers relevant. Dieser entspricht in der Regel dem letzten bekannten Standort des Geräts.

Verwende insbesondere den Anbieter für kombinierte Standortbestimmung, um den letzten bekannten Standort des Geräts abzurufen. Der Anbieter für kombinierte Standortbestimmung ist eine der Standort-APIs in Google Play-Diensten. Er verwaltet die zugrunde liegende Standorttechnologie und stellt eine einfache API bereit, über die Sie Anforderungen allgemein festlegen können, z. B. hohe Genauigkeit oder geringer Energieverbrauch. Außerdem wird der Akkuverbrauch des Geräts optimiert.

Hinweis:Wenn deine App im Hintergrund ausgeführt wird, sollte der Zugriff auf die Standortermittlung für die Hauptfunktion der App von entscheidender Bedeutung sein und für Nutzer entsprechend offengelegt werden.

In dieser Lektion erfahren Sie, wie Sie den Standort eines Geräts mit der Methode getLastLocation() im Fused Location Provider mit einer einzelnen Anfrage anfordern.

Google Play-Dienste einrichten

Damit Sie auf den Anbieter für kombinierte Standortbestimmung zugreifen können, muss das Entwicklungsprojekt Ihrer App Google Play-Dienste enthalten. Lade die Komponente für die Google Play-Dienste über den SDK-Manager herunter, installiere sie und füge die Bibliothek deinem Projekt hinzu. Weitere Informationen findest du in der Anleitung zum Einrichten von Google Play-Diensten.

App-Berechtigungen festlegen

Apps, deren Funktionen Standortdienste verwenden, müssen je nach den Anwendungsfällen für diese Funktionen Berechtigungen zur Standortermittlung anfordern.

Client für Standortdienste erstellen

Erstellen Sie in der onCreate()-Methode Ihrer Aktivität eine Instanz des Fused Location Provider-Clients, wie im folgenden Code-Snippet gezeigt.

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

Letzten bekannten Standort abrufen

Nachdem du den Client für Standortdienste erstellt hast, kannst du den letzten bekannten Standort des Geräts eines Nutzers abrufen. Wenn Ihre App damit verbunden ist, können Sie die Methode getLastLocation() des Anbieters für kombinierte Standortbestimmung verwenden, um den Gerätestandort abzurufen. Die Genauigkeit des von diesem Aufruf zurückgegebenen Standorts hängt von der Berechtigungseinstellung ab, die du in dein App-Manifest eingibst. Eine Beschreibung hierzu findest du in der Anleitung zum Anfordern von Berechtigungen zur Standortermittlung.

Rufen Sie die Methode getLastLocation() auf, um den letzten bekannten Standort anzufordern. Das folgende Code-Snippet veranschaulicht die Anfrage und eine einfache Verarbeitung der Antwort:

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

Die Methode getLastLocation() gibt ein Task-Objekt zurück, mit dem Sie ein Location-Objekt mit den Breiten- und Längengradkoordinaten eines geografischen Standorts abrufen können. Das Standortobjekt kann in den folgenden Situationen null sein:

  • Die Standortermittlung ist in den Geräteeinstellungen deaktiviert. Das Ergebnis könnte null sein, auch wenn der letzte Standort zuvor abgerufen wurde, da beim Deaktivieren des Standorts auch der Cache geleert wird.
  • Das Gerät hat seinen Standort nie aufgezeichnet, z. B. ein neues Gerät oder ein Gerät, das auf die Werkseinstellungen zurückgesetzt wurde.
  • Die Google Play-Dienste auf dem Gerät wurden neu gestartet und es gibt keinen aktiven Fused Location Provider-Client, der den Standort nach dem Neustart der Dienste angefordert hat. Um dies zu vermeiden, können Sie einen neuen Client erstellen und Standortaktualisierungen selbst anfordern. Weitere Informationen finden Sie unter Standortaktualisierungen empfangen.

Beste Standortschätzung auswählen

FusedLocationProviderClient bietet mehrere Methoden zum Abrufen von Informationen zum Gerätestandort. Wählen Sie je nach Anwendungsfall Ihrer Anwendung eine der folgenden Optionen aus:

  • getLastLocation() ruft schneller eine Standortschätzung ab und minimiert die Akkunutzung, die Ihrer App zugeschrieben werden kann. Die Standortinformationen sind jedoch möglicherweise veraltet, wenn keine anderen Clients den Standort in letzter Zeit aktiv verwendet haben.
  • getCurrentLocation() erhält regelmäßig aktuellere und genauere Standortdaten. Diese Methode kann jedoch dazu führen, dass eine aktive Standortberechnung auf dem Gerät erfolgt.

    Das ist die empfohlene Methode, um nach Möglichkeit einen neuen Standort abzurufen. Es ist sicherer als Alternativen wie das eigene Starten und Verwalten von Standortupdates mit requestLocationUpdates(). Wenn Ihre Anwendung requestLocationUpdates() aufruft, verbraucht sie unter Umständen viel Strom, wenn der Standort nicht verfügbar ist oder die Anfrage nach dem Abrufen eines neuen Standorts nicht korrekt beendet wird.

Weitere Informationen

Weitere Informationen zum Abrufen des aktuellen Standorts in Android finden Sie in den folgenden Materialien:

Produktproben

  • Beispiel-App, mit der Best Practices beim Abrufen des aktuellen Standorts veranschaulicht werden