Standort unter Wear OS erkennen

Der kleine, kompakte Formfaktor einer Smartwatch macht Wear OS zu einer idealen Plattform für Apps, die den Nutzerstandort aufzeichnen, melden und auf ihn reagieren. Sie können z. B. Apps entwickeln, die Nutzern Echtzeitinformationen zu Entfernung, Geschwindigkeit und Richtung geben oder auf einen Blick erkennen, wo sich die Nutzer gerade befinden.

Weitere Informationen finden Sie unter Apps mit Standorterkennung erstellen.

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

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

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

Wie in den folgenden Abschnitten beschrieben, muss Ihre App den Verlust von Standortdaten verarbeiten, wenn eine Smartwatch ohne Sensor von einem Smartphone getrennt wird.

Methode auswählen

Es gibt verschiedene 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 Services API.

Verwenden Sie FLP unter den folgenden Umständen:

  • Sie möchten, dass Standortdaten immer aktuell sind, aber nicht kontinuierlich. So kann beispielsweise der Standort eines geparkten Autos markiert werden.
  • Sie möchten fortlaufend Standortdaten erhalten, benötigen aber nicht den Standortverlauf.

Verwenden Sie WHS unter den folgenden Umständen:

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

Informationen zu Smartwatches, die mit iPhones gekoppelt sind, finden Sie unter Standortdaten für Smartwatches, die mit iPhones gekoppelt sind.

Anbieter für kombinierte Standortbestimmung verwenden

Auf einer Smartwatch können Sie mit FusedLocationProviderClient Standortdaten abrufen. Der FLP verwendet möglicherweise Standortdaten des Smartphones. 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 Uhr ohne integrierten GPS-Sensor joggt und das gekoppelte Smartphone zu Hause lässt, kann die Smartwatch-App keine Standortdaten über das verbundene Gerät abrufen. Erkenne diese Situation in deiner App und warne den Nutzer, dass Standortfunktionen nicht verfügbar sind.

Um zu ermitteln, ob eine Uhr einen integrierten GPS-Sensor hat, rufen Sie die Methode hasSystemFeature() mit PackageManager.FEATURE_LOCATION_GPS auf. Der folgende Code erkennt, ob die Uhr einen eingebauten GPS-Sensor hat, 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);
}

Trennungsereignisse verarbeiten

Wenn eine Uhr keinen integrierten GPS-Sensor hat und die Verbindung zu einem Smartphone verliert, verliert die Uhr ihren Standortdatenstream. Wenn Ihre Anwendung einen ständigen Datenstrom erwartet, muss sie den Verlust einer Verbindung erkennen, den Nutzer warnen und die Funktionalität schrittweise beeinträchtigen.

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

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 ein Intent zurückgegeben wird, extrahieren Sie mit der Methode LocationAvailability.extractLocationAvailability(Intent) den Standortverfügbarkeitsstatus aus dem Intent.

Alias nicht gefunden

Wenn das GPS-Signal unterbrochen wird, kannst du den letzten bekannten Standort der Uhr des Benutzers abrufen. Das Abrufen des letzten bekannten Standorts ist hilfreich, wenn du keine GPS-Standortermittlung erhältst, wenn die Uhr nicht über das integrierte GPS verfügt und die Verbindung zum Smartphone unterbrochen wird. Weitere Informationen finden Sie unter Letzten bekannten Standort abrufen.

Standort mit Batch-Aufrufen leeren

Wenn Sie Batchaufrufe 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.