Standort unter Wear OS erkennen

Der kleine, übersichtliche Formfaktor einer Smartwatch macht Wear OS zu einer idealen Plattform für Apps, die den Standort des Nutzers aufzeichnen, melden und darauf reagieren. Sie können beispielsweise Apps entwickeln, die Nutzern Echtzeit-Updates zu ihrer Entfernung, Geschwindigkeit und Richtung geben oder ihnen auf einen Blick Informationen zu ihrer Umgebung liefern.

Weitere Informationen finden Sie unter Standortbezogene Apps entwickeln.

Einige Smartwatches haben einen integrierten GPS-Sensor, der Standortdaten abruft, ohne dass ein Smartphone verbunden sein muss. Wenn Sie Standortdaten in einer Smartwatch-App anfordern, ruft das System den Standort entweder vom Smartphone oder von der Smartwatch ab und verwendet dabei die energieeffizienteste Methode. Auch ohne GPS-Sensor in der Smartwatch können Sie also Standortinformationen erhalten.

Um die Auswirkungen der Erfassung von Standortdaten auf die Akkulaufzeit zu verringern, rufen Sie setPriority() mit dem Wert PRIORITY_BALANCED_POWER_ACCURACY auf. Je nach Prioritätseinstellung werden Chips unterschiedlich optimiert.

Wenn möglich, sollten Sie den Akku schonen, indem Sie den Standort mit setInterval() höchstens einmal pro Minute abrufen.

Wie in den folgenden Abschnitten beschrieben, muss Ihre App den Verlust von Standortdaten verarbeiten, wenn eine Smartwatch ohne Sensor die Verbindung zu einem Smartphone verliert.

Methode auswählen

Es gibt zwei Möglichkeiten, einer Wear OS-App Standortdaten zur Verfügung zu stellen: Sie können den Fused Location Provider (FLP) oder Wear Health Services (WHS) verwenden. FLP ist eine Google Play-Dienste-API.

Verwenden Sie FLP in folgenden Fällen:

  • Sie möchten Standortdaten nur in bestimmten Momenten, aber nicht kontinuierlich erfassen, z. B. um den Standort eines geparkten Autos zu markieren.
  • Sie möchten, dass der Standort kontinuierlich erfasst wird, benötigen aber keinen Standortverlauf.

Verwenden Sie WHS in den folgenden Fällen:

  • Sie möchten Daten von anderen Sensoren oder werden in Zukunft wahrscheinlich Daten von anderen Sensoren benötigen.
  • Ihre App ist eine Trainings- oder Fitness-App, die Standortdaten über einen bestimmten Zeitraum hinweg erfassen muss.

Anbieter für kombinierte Standortbestimmung verwenden

Auf einer Smartwatch können Sie Standortdaten mit FusedLocationProviderClient abrufen. Der FLP kann Standortdaten vom Smartphone verwenden. Weitere Informationen finden Sie unter Client für Standortdienste erstellen.

Informationen zum Anfordern von Standortaktualisierungen und zum kontinuierlichen Erfassen des Standorts eines Nutzers finden Sie unter Standortaktualisierungen anfordern.

Integriertes GPS erkennen

Wenn ein Nutzer mit einer Smartwatch joggt, die keinen integrierten GPS-Sensor hat, und das gekoppelte Smartphone zu Hause lässt, kann Ihre Smartwatch-App keine Standortdaten über das verbundene Gerät abrufen. Erkennen Sie diese Situation in Ihrer App und warnen Sie den Nutzer, dass die Standortfunktionen nicht verfügbar sind.

Rufen Sie die Methode hasSystemFeature() mit PackageManager.FEATURE_LOCATION_GPS auf, um festzustellen, ob eine Smartwatch einen integrierten GPS-Sensor hat. Der folgende Code erkennt, ob die Smartwatch beim Start einer Aktivität einen integrierten GPS-Sensor hat:

class LocationActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ...
    }
    fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)
}

Trennungsereignisse verarbeiten

Wenn eine Smartwatch keinen integrierten GPS-Sensor hat und die Verbindung zu einem Smartphone verliert, gehen die Standortdaten verloren. Wenn Ihre App einen konstanten Datenstrom erwartet, muss sie den Verbindungsverlust erkennen, den Nutzer warnen und die Funktionalität schrittweise reduzieren.

Wie bei einem Mobilgerät übergeben Sie beim Anfordern von Standortaktualisierungen mit FusedLocationProviderClient.requestLocationUpdates() entweder ein LocationCallback- oder ein PendingIntent-Objekt. Beide enthalten die Standortinformationen und den Status LocationAvailability.

Wenn Sie die Option LocationCallback verwenden, überschreiben Sie onLocationAvailability(), um Aktualisierungen zum Verfügbarkeitsstatus von Standorten zu erhalten.

Wenn Sie die Option PendingIntent verwenden und Intent zurückgegeben wird, extrahieren Sie den Verfügbarkeitsstatus des Standorts aus Intent mit der Methode LocationAvailability.extractLocationAvailability(Intent).

Alias nicht gefunden

Wenn das GPS-Signal verloren geht, können Sie den letzten bekannten Standort der Smartwatch des Nutzers abrufen. Das Abrufen des letzten bekannten Standorts ist hilfreich, wenn Sie keine GPS-Positionierung erhalten und die Smartwatch kein integriertes GPS hat und die Verbindung zum Smartphone verliert. Weitere Informationen finden Sie unter Letzten bekannten Standort abrufen.

Standort mit Batch-Aufrufen leeren

Wenn Sie Batch-Aufrufe verwenden, rufen Sie flushLocations() auf, wenn der Bildschirm wieder eingeschaltet wird oder aus dem Inaktivmodus zurückkehrt, um sofort alle Batch-Standorte an alle registrierten LocationListeners, LocationCallbacks und Pending Intents zurückzugeben.