Letzten bekannten Standort abrufen

Mit den Standort-APIs von Google Play-Diensten kann Ihre App den letzten bekannten Standort des Geräts des Nutzers anfordern. In den meisten Fällen sind Sie am aktuellen Standort des Nutzers interessiert, der in der Regel dem zuletzt bekannten Standort des Geräts entspricht.

Verwenden Sie dazu 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 den Google Play-Diensten. Sie verwaltet die zugrunde liegende Standorttechnologie und bietet eine einfache API, mit der Sie Anforderungen auf hohem Niveau angeben können, z. B. hohe Genauigkeit oder geringe Stromaufnahme. Außerdem wird die Akkunutzung des Geräts optimiert.

Hinweis:Wenn Ihre App im Hintergrund ausgeführt wird, sollte der Zugriff auf die Standortermittlung für die Hauptfunktionen der App entscheidend sein und den Nutzern entsprechend offengelegt werden.

In dieser Lektion erfahren Sie, wie Sie mit der Methode getLastLocation() im fusionierten Standortanbieter eine einzelne Anfrage zum Standort eines Geräts stellen.

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. Laden Sie die Google Play-Dienstkomponente über den SDK Manager herunter und installieren Sie sie. Fügen Sie die Bibliothek dann Ihrem Projekt hinzu. Weitere Informationen finden Sie in der Anleitung zum Einrichten der Google Play-Dienste.

App-Berechtigungen angeben

Für Apps, deren Funktionen Standortdienste verwenden, müssen je nach Anwendungsfall Berechtigungen zur Standortermittlung angefordert werden.

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 Sie den Standortdienst-Client erstellt haben, können Sie den zuletzt bekannten Standort des Geräts eines Nutzers abrufen. Wenn Ihre App mit diesen verbunden ist, können Sie den Gerätestandort mithilfe der Methode getLastLocation() des Anbieters für den fusionierten Standort abrufen. Die Genauigkeit des von diesem Aufruf zurückgegebenen Standorts wird durch die Berechtigungseinstellung bestimmt, die Sie in Ihrem App-Manifest festgelegt haben. Weitere Informationen finden Sie in der Anleitung zum Anfordern von Berechtigungen zur Standortermittlung.

Rufen Sie die Methode getLastLocation() auf, um den letzten bekannten Standort abzurufen. 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 zurück, mit dem Sie ein Location-Objekt mit den Breiten- und Längengraden eines geografischen Standorts abrufen können. Das Standortobjekt kann in den folgenden Fällen null sein:

  • Die Standortermittlung ist in den Geräteeinstellungen deaktiviert. Das Ergebnis kann null sein, auch wenn der letzte Standort zuvor abgerufen wurde, da durch das Deaktivieren der Standortermittlung auch der Cache geleert wird.
  • Der Standort wurde vom Gerät nie aufgezeichnet. Das kann bei einem neuen Gerät oder einem Gerät der Fall sein, das auf die Werkseinstellungen zurückgesetzt wurde.
  • Die Google Play-Dienste auf dem Gerät wurden neu gestartet und es gibt keinen aktiven Client des Anbieters von kombinierten Standortinformationen, der nach dem Neustart der Dienste den Standort angefordert hat. Sie können diese Situation vermeiden, indem Sie einen neuen Kunden erstellen und Standortaktualisierungen selbst anfordern. Weitere Informationen finden Sie unter Standortaktualisierungen erhalten.

Die beste Standortschätzung auswählen

Die FusedLocationProviderClient bietet mehrere Methoden zum Abrufen von Gerätestandortinformationen. Wählen Sie je nach Anwendungsfall Ihrer App eine der folgenden Optionen aus:

  • getLastLocation() holt sich eine Standortschätzung schneller und minimiert den Akkuverbrauch, der Ihrer App zugeordnet werden kann. Die Standortinformationen sind jedoch möglicherweise veraltet, wenn in letzter Zeit keine anderen Clients den Standort aktiv verwendet haben.
  • getCurrentLocation() erhält häufiger einen aktuelleren und genaueren Standort. Diese Methode kann jedoch dazu führen, dass die Berechnung des aktiven Standorts auf dem Gerät erfolgt.

    Dies ist die empfohlene Methode, um nach Möglichkeit einen aktuellen Standort zu erhalten. Sie ist sicherer als Alternativen wie das Starten und Verwalten von Standortaktualisierungen mit requestLocationUpdates(). Wenn Ihre App requestLocationUpdates() aufruft, kann sie manchmal viel Akku verbrauchen, wenn der Standort nicht verfügbar ist oder die Anfrage nach dem Abrufen eines aktuellen Standorts nicht richtig beendet wird.

Weitere Informationen

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

Produktproben

  • Beispielanwendung, die Best Practices beim Abrufen des aktuellen Standorts veranschaulicht