Standort unter Wear OS erkennen

Durch den kleinen, übersichtlichen Formfaktor einer Smartwatch ist Wear OS die ideale Plattform für Apps, die den Nutzerstandort aufzeichnen, melden und darauf reagieren. Beispielsweise können Sie Apps erstellen, die Nutzern in Echtzeit Informationen zu Entfernung, Geschwindigkeit und Richtung geben oder auf einen Blick Hinweise auf ihre Umgebung liefern.

Weitere Informationen

Einige Smartwatches haben einen integrierten GPS-Sensor, der Standortdaten abruft, ohne dass ein verbundenes Smartphone erforderlich ist. Wenn Sie Standortdaten in einer Smartwatch-App anfordern, ruft das System den Standort entweder vom Smartphone oder von der Smartwatch mit der energieeffizientesten Methode ab. Sie können also auch ohne GPS-Sensor Standortinformationen abrufen.

Wenn Sie die Auswirkungen der Erfassung von Standortdaten auf die Akkulaufzeit verringern möchten, rufen Sie setPriority() mit dem Wert PRIORITY_BALANCED_POWER_ACCURACY auf. Unterschiedliche Prioritätseinstellungen können Chips unterschiedlich optimieren.

Wenn möglich, kannst du den Akku schonen, indem du mit setInterval() nicht öfter als einmal pro Minute nach dem Standort fragst.

Wie in den folgenden Abschnitten beschrieben, muss deine App mit dem Verlust von Standortdaten umgehen, wenn eine Smartwatch ohne Sensor vom Smartphone getrennt wird.

Methode auswählen

Es gibt mehrere Möglichkeiten, Standortdaten für eine Wear OS-App bereitzustellen. Dazu kannst du den Fused Location Provider (FLP) oder Wear Health Services (WHS) verwenden. FLP ist eine API der Google Play-Dienste.

Verwenden Sie FLP in folgenden Fällen:

  • Sie benötigen Standortdaten, um sofort, aber nicht kontinuierlich, z. B. den Standort eines geparkten Autos zu markieren.
  • Sie möchten dauerhaft auf den Standort zugreifen, benötigen jedoch keinen Standortverlauf.

Verwenden Sie das WHS unter folgenden Umständen:

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

Informationen zu Smartwatches, für die ein Pairing mit iPhones besteht, findest du unter Standortdaten für Smartwatches, die mit iPhones gekoppelt sind.

Fused Location Provider (Anbieter für kombinierte Standortbestimmung) verwenden

Auf einer Smartwatch kannst du Standortdaten über den FusedLocationProviderClient abrufen. Die FLP kann Standortdaten des Smartphones verwenden. Weitere Informationen finden Sie unter Client für Standortdienste erstellen.

Informationen dazu, wie Sie Standortaktualisierungen anfordern und den Standort eines Nutzers kontinuierlich verfolgen, 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 nicht dabei hat, kann die 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.

Wenn Sie feststellen möchten, ob eine Smartwatch einen integrierten GPS-Sensor hat, rufen Sie die Methode hasSystemFeature() mit PackageManager.FEATURE_LOCATION_GPS auf. Der folgende Code erkennt, ob die Uhr über einen eingebauten GPS-Sensor verfügt, wenn du eine Aktivität startest:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.")
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
}

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

Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.");
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
    ...
}

private boolean hasGps() {
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
}

Umgang mit Verbindungsunterbrechungen

Wenn die Smartwatch keinen eingebauten GPS-Sensor hat und keine Verbindung zu einem Smartphone besteht, verliert sie den Standortdatenstream. Wenn Ihre Anwendung einen konstanten Datenstrom erwartet, muss sie den Verbindungsverlust erkennen, den Nutzer warnen und die Funktionalität ordnungsgemäß einschränken.

Wie bei einem Mobilgerät wird bei Anfragen zur Standortaktualisierung mit FusedLocationProviderClient.requestLocationUpdates() entweder ein LocationCallback- oder ein PendingIntent übergeben. Beide umfassen die Standortinformationen und den Status LocationAvailability.

Wenn Sie die Option LocationCallback verwenden, überschreiben Sie onLocationAvailability(), um Updates zum Verfügbarkeitsstatus des Standorts zu erhalten.

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

Standort des Alias nicht gefunden

Wenn das GPS-Signal unterbrochen wird, kannst du den letzten bekannten Standort der Uhr des Nutzers abrufen. Das Abrufen des letzten bekannten Standorts ist hilfreich, wenn Sie keine GPS-Position erhalten können, die Uhr kein integriertes GPS hat und die Verbindung zum Telefon unterbrochen wird. Weitere Informationen finden Sie unter Letzten bekannten Standort abrufen.

Standort mit aufeinanderfolgenden Aufrufen löschen

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