DataItem
definiert die Schnittstelle, über die das System Daten zwischen Handhelds und
Wearables. Ein DataItem
besteht im Allgemeinen aus den folgenden Komponenten:
- Nutzlast:Ein Byte-Array, das Sie mit Daten festlegen können. können Sie Ihre eigene Objektserialisierung durchführen und Deserialisierung. 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:
Die Data Layer API kann nur mit Android-Smartphones oder Wear OS Nachrichten senden und Daten synchronisieren
Uhren. Wenn Ihr Wear OS-Gerät mit einem iOS-Gerät gekoppelt ist, wird die Data Layer API nicht
Verwenden Sie die Data Layer API daher nicht als
mit einem Netzwerk kommunizieren können. Folgen Sie stattdessen der
<ph type="x-smartling-placeholder"></ph>
gleiches Muster wie bei einer mobilen App, mit einigen geringfügigen Unterschieden.
Sie implementieren DataItem
normalerweise nicht
. Gehen Sie stattdessen so vor:
-
erstellen
PutDataRequest
-Objekt mit einem Stringpfad zur eindeutigen Identifizierung das Element. -
anrufen
setData()
, um die Nutzlast festzulegen. -
Wenn sich eine Verzögerung bei der Synchronisierung negativ auf die Nutzererfahrung auswirken würde, rufen Sie
<ph type="x-smartling-placeholder"></ph>
setUrgent()
-
Verwenden Sie die Methode
putDataItem
der <ph type="x-smartling-placeholder"></ph>DataClient
, um anzufordern, dass das System das Datenelement erstellt.
Beim Anfordern von Datenelementen gibt das System Objekte zurück, die den Parameter
DataItem
-Schnittstelle. Anstatt mit Rohbyte zu arbeiten,
setData()
, wir empfehlen Ihnen,
Datenzuordnung verwenden,
ein Datenelement mit einer Bundle
-ähnlichen Oberfläche verfügbar.
Weitere Informationen finden Sie in der DataLayer-Beispielanwendung verfügbar.
Daten mit einer Datenzuordnung synchronisieren
Verwenden Sie nach Möglichkeit die Methode
DataMap
.
Auf diese Weise können Sie mit Datenelementen in Form einer Android-Bundle
arbeiten.
Das System führt also die Objektserialisierung und -deserialisierung für Sie durch und Sie können
mit Schlüssel/Wert-Paaren.
So verwenden Sie eine Datenzuordnung:
-
erstellen
PutDataMapRequest
-Objekt, wobei der Pfad des Datenelements festgelegt wird.Hinweis:Der Pfadstring ist eine eindeutige Kennzeichnung für den Datenelement, mit dem Sie von beiden Seiten der Verbindung darauf zugreifen können. Der Pfad muss mit einem Schrägstrich beginnen. Wenn Sie hierarchische Daten in Ihrem App erstellt haben, erstellen Sie ein Pfadschema, das mit der Struktur der Daten übereinstimmt.
-
anrufen
PutDataMapRequest.getDataMap()
, um eine Datenzuordnung zu erhalten, die Sie Werte festlegen. -
Legen Sie Werte für die Datenzuordnung mit den
put...()
-Methoden fest, z. B. <ph type="x-smartling-placeholder"></ph>putString()
-
Wenn sich eine Verzögerung bei der Synchronisierung negativ auf die Nutzererfahrung auswirken würde, rufen Sie
<ph type="x-smartling-placeholder"></ph>
setUrgent()
-
anrufen
PutDataMapRequest.asPutDataRequest()
, um eine <ph type="x-smartling-placeholder"></ph>PutDataRequest
-Objekt. -
Verwenden Sie die Methode
putDataItem
der <ph type="x-smartling-placeholder"></ph>DataClient
, um anzufordern, dass das System das Datenelement erstellt.Hinweis: Wenn die Verbindung zwischen Smartphone und Wearable getrennt ist: werden die Daten gepuffert und synchronisiert, wenn die Verbindung wiederhergestellt ist.
Die Methode increaseCounter()
im folgenden Beispiel zeigt, wie Sie ein
Data Map ein und fügen Sie Daten ein:
Kotlin
private const val COUNT_KEY = "com.example.key.count" class MainActivity : Activity() { private lateinit var dataClient: DataClient private var count = 0 ... // Create a data map and put data in it private fun increaseCounter() { val putDataReq: PutDataRequest = PutDataMapRequest.create("/count").run { dataMap.putInt(COUNT_KEY, count++) asPutDataRequest() } val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq) } ... }
Java
public class MainActivity extends Activity { private static final String COUNT_KEY = "com.example.key.count"; private DataClient dataClient; private int count = 0; ... // Create a data map and put data in it private void increaseCounter() { PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/count"); putDataMapReq.getDataMap().putInt(COUNT_KEY, count++); PutDataRequest putDataReq = putDataMapReq.asPutDataRequest(); Task<DataItem> putDataTask = dataClient.putDataItem(putDataReq); } ... }
Weitere Informationen zur Handhabung
<ph type="x-smartling-placeholder"></ph>
Tasks
, siehe
<ph type="x-smartling-placeholder"></ph>
Referenzdokumentation.
DataItem-Priorität festlegen
Die <ph type="x-smartling-placeholder"></ph>
Die DataClient
API ermöglicht dringende Anfragen zur Synchronisierung von
DataItem
Objekte.
Normalerweise verzögert das System die Bereitstellung von Datenelementen
Wear OS-Netzwerk verbinden, um die Akkulaufzeit der Nutzergeräte zu verbessern.
Wenn sich eine Verzögerung bei der Synchronisierung von Datenelementen negativ auf die Nutzererfahrung auswirkt, können Sie
als dringend kennzeichnen. Beispiel: In einer Fernbedienungs-App, bei der der Nutzer
Aktionen sofort berücksichtigt werden, können Sie das System Ihre Datenelemente synchronisieren lassen.
aufrufen, indem Sie
<ph type="x-smartling-placeholder"></ph>
setUrgent()
Wenn du setUrgent()
nicht anrufst, kann das System bis zu 30 Minuten verzögern,
nicht dringende Datenelemente synchronisieren, auch wenn die Verzögerung normalerweise nur wenige Minuten beträgt
Minuten. Die standardmäßige Dringlichkeit ist nicht dringend, daher müssen Sie
setUrgent()
, wenn Sie das Verhalten der sofortigen Synchronisierung von
früheren Versionen der Wear OS API.
Auf Datenelementereignisse warten
Benachrichtigen, wenn sich ein Datenelement auf einer Seite der Datenschichtverbindung ändert der Nutzenden über Änderungen auf der anderen Seite der Verbindung informiert. Implementieren Sie dazu einen Listener für Datenelementereignisse.
Mit dem Code-Snippet im folgenden Beispiel wird die App benachrichtigt, wenn der Wert des Zähler, der im vorherigen Beispiel definiert wurde:
Kotlin
private const val COUNT_KEY = "com.example.key.count" class MainActivity : Activity(), DataClient.OnDataChangedListener { private var count = 0 override fun onResume() { super.onResume() Wearable.getDataClient(this).addListener(this) } override fun onPause() { super.onPause() Wearable.getDataClient(this).removeListener(this) } 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 } } } // Method to update the count private fun updateCount(int: Int) { ... } ... }
Java
public class MainActivity extends Activity implements DataClient.OnDataChangedListener { private static final String COUNT_KEY = "com.example.key.count"; private int count = 0; @Override protected void onResume() { super.onResume(); Wearable.getDataClient(this).addListener(this); } @Override protected void onPause() { super.onPause(); Wearable.getDataClient(this).removeListener(this); } @Override public void onDataChanged(DataEventBuffer dataEvents) { for (DataEvent event : dataEvents) { if (event.getType() == DataEvent.TYPE_CHANGED) { // DataItem changed DataItem item = event.getDataItem(); if (item.getUri().getPath().compareTo("/count") == 0) { DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap(); updateCount(dataMap.getInt(COUNT_KEY)); } } else if (event.getType() == DataEvent.TYPE_DELETED) { // DataItem deleted } } } // Method to update the count private void updateCount(int c) { ... } ... }
In dieser Aktivität wird die
DataClient.OnDataChangedListener
-Schnittstelle. Die Aktivität wird von sich selbst hinzugefügt.
als Listener für Datenelementereignisse
der Methode onResume()
und entfernt den Listener aus der
onPause()
-Methode. Um eine Implementierung mit Bildern, Modelle und
finden Sie im DataLayer-Beispiel
Sie können den Listener auch als Dienst implementieren. Weitere Informationen finden Sie unter Auf Datenschicht warten Ereignisse.