Ein DataItem
definiert die Schnittstelle, die das System zum Synchronisieren von Daten zwischen Smartphones und
Wearables verwendet. Ein DataItem besteht in der Regel aus den folgenden Komponenten:
- Nutzlast:Ein Byte-Array, das Sie mit Daten festlegen können. So können Sie Ihre eigene Objektserialisierung und Deserialisierung durchführen. Die Größe der Nutzlast ist auf 100 KB begrenzt.
-
Pfad: Ein eindeutiger String, der mit einem Schrägstrich beginnen muss, z. B.
"/path/to/data".
Hinweis:
Mit der Data Layer API können nur Nachrichten gesendet und Daten mit Android-Smartphones oder Wear OS
Smartwatches synchronisiert werden. Wenn Ihr Wear OS-Gerät mit einem iOS-Gerät gekoppelt ist, funktioniert die Data Layer API nicht.
Verwenden Sie die Data Layer API daher nicht als primäre Methode zur Kommunikation mit einem Netzwerk. Folgen Sie stattdessen dem
gleichen Muster wie bei einer mobilen App, mit einigen geringfügigen Unterschieden.
Normalerweise implementieren Sie DataItem
nicht direkt. Stattdessen gehen Sie so vor:
-
Erstellen Sie ein
PutDataRequest-Objekt und geben Sie einen Stringpfad an, um das Element eindeutig zu identifizieren. -
Rufen Sie
setData()auf, um die Nutzlast festzulegen. -
Wenn sich eine Verzögerung bei der Synchronisierung negativ auf die Nutzererfahrung auswirken würde, rufen Sie
setUrgent()auf. -
Verwenden Sie die Methode
putDataItemder KlasseDataClient, um das System aufzufordern, das Datenelement zu erstellen.
Wenn Sie Datenelemente anfordern, gibt das System Objekte zurück, die die DataItem-Schnittstelle ordnungsgemäß implementieren. Anstatt jedoch mit Rohbytes mit
setData() zu arbeiten, empfehlen wir, dass Sie
eine Datenzuordnung verwenden,
die ein Datenelement mit einer Bundle-ähnlichen Schnittstelle verfügbar macht.
Weitere Informationen finden Sie in der Beispiel-App DataLayer.
Daten mit einer Datenzuordnung synchronisieren
Verwenden Sie nach Möglichkeit die
DataMap Klasse.
Mit diesem Ansatz können Sie mit Datenelementen in Form eines Android-Bundle arbeiten. Das System übernimmt also die Objektserialisierung und -deserialisierung für Sie und Sie können Daten mit Schlüssel/Wert-Paaren bearbeiten.
So verwenden Sie eine Datenzuordnung:
-
Erstellen Sie ein
PutDataMapRequest-Objekt und legen Sie den Pfad des Datenelements fest.Hinweis: Der Pfadstring ist eine eindeutige Kennung für das Datenelement, mit der Sie von beiden Seiten der Verbindung darauf zugreifen können. Der Pfad muss mit einem Schrägstrich beginnen. Wenn Sie hierarchische Daten in Ihrer App verwenden, erstellen Sie ein Pfadschema, das der Struktur der Daten entspricht.
-
Rufen Sie
PutDataMapRequest.getDataMap()auf, um eine Datenzuordnung abzurufen, für die Sie Werte festlegen können. -
Legen Sie Werte für die Datenzuordnung mit den
put...()Methoden fest, z. B.putString(). -
Wenn sich eine Verzögerung bei der Synchronisierung negativ auf die Nutzererfahrung auswirken würde, rufen Sie
setUrgent()auf. -
Rufen Sie
PutDataMapRequest.asPutDataRequest()auf, um einPutDataRequest-Objekt abzurufen. -
Verwenden Sie die Methode
putDataItemder KlasseDataClient, um das System aufzufordern, das Datenelement zu erstellen.Hinweis: Wenn die Verbindung zwischen Smartphone und Wearable-Gerät getrennt ist, werden die Daten gepuffert und synchronisiert, sobald die Verbindung wiederhergestellt ist.
Die Methode increaseCounter() im folgenden Beispiel zeigt, wie Sie eine Datenzuordnung erstellen und Daten darin ablegen:
private fun increaseCounter(): Task<DataItem> { val putDataReq: PutDataRequest = PutDataMapRequest.create("/count").run { dataMap.putInt(COUNT_KEY, count++) asPutDataRequest() } return Wearable.getDataClient(this) .putDataItem(putDataReq) }
Weitere Informationen zum Umgang mit
Tasks finden Sie in der
Referenzdokumentation.
Achtung:Prüfen Sie vor der Verwendung der Wearable Data Layer API, ob sie auf einem Gerät verfügbar ist. Andernfalls tritt eine Ausnahme auf. Verwenden Sie die GoogleApiAvailability
Klasse, wie in Horologist implementiert.
DataItem-Priorität festlegen
Die
DataClient-API ermöglicht dringende Anfragen zur Synchronisierung von
DataItem
-Objekten.
Normalerweise verzögert das System die Übermittlung von Datenelementen an das Wear OS-Netzwerk, um die Akkulaufzeit von Nutzergeräten zu verlängern. Wenn sich eine Verzögerung bei der Synchronisierung von Datenelementen jedoch negativ auf die Nutzererfahrung auswirkt, können Sie sie als dringend markieren. In einer Fernbedienungs-App, in der der Nutzer erwartet, dass seine
Aktionen sofort angezeigt werden, können Sie beispielsweise das System auffordern, Ihre Datenelemente
sofort zu synchronisieren, indem Sie
setUrgent() aufrufen.
Wenn Sie setUrgent() nicht aufrufen, kann das System bis zu 30 Minuten warten, bevor es nicht dringende Datenelemente synchronisiert. In der Regel beträgt die Verzögerung jedoch nur wenige Minuten. Die Standardpriorität ist „nicht dringend“. Sie müssen also setUrgent() verwenden, wenn Sie das Verhalten der sofortigen Synchronisierung aus früheren Versionen der Wear OS API beibehalten möchten.
Auf Datenelementereignisse warten
Wenn eine Seite der Data Layer-Verbindung ein Datenelement ändert, benachrichtigen Sie den Nutzer über alle Änderungen auf der anderen Seite der Verbindung. Dazu können Sie einen Listener für Datenelementereignisse implementieren.
Das Code-Snippet im folgenden Beispiel benachrichtigt die App, wenn sich der Wert des im vorherigen Beispiel definierten Zählers ändert:
override fun onDataChanged(dataEvents: DataEventBuffer) { dataEvents.forEach { event -> // DataItem changed if (event.type == DataEvent.TYPE_CHANGED) { event.dataItem.also { item -> if (item.uri.path?.compareTo("/count") == 0) { DataMapItem.fromDataItem(item).dataMap.apply { updateCount(getInt(COUNT_KEY)) } } } } else if (event.type == DataEvent.TYPE_DELETED) { // DataItem deleted } } }
Diese Aktivität implementiert die
DataClient.OnDataChangedListener Schnittstelle. Die Aktivität fügt sich selbst als Listener für Datenelementereignisse in der Methode onResume() hinzu und entfernt den Listener in der Methode onPause(). Eine Implementierung mit Bildern, Ansichtsmodellen und
Diensten finden Sie in der Beispiel-App DataLayer.
Sie können den Listener auch als Dienst implementieren. Weitere Informationen finden Sie unter Auf Data Layer Ereignisse warten.