DataItem
Sistemin, avuç içi cihazlar ile verileri senkronize etmek için kullandığı arayüzü tanımlar.
cihazlardır. DataItem
genellikle aşağıdaki bileşenlerden oluşur:
- Yük: Verilerle ayarlayabileceğiniz bir bayt dizisidir. kendi nesne serileştirmenizi yapmanıza ve seri durumdan çıkarma. Yükün boyutu 100 KB ile sınırlıdır.
-
Yol: Düz eğik çizgiyle başlaması gereken benzersiz bir dize (ör.
"/path/to/data"
.
Not:
Data Katman API'si yalnızca mesaj gönderebilir ve verileri Android telefonlar ya da Wear OS ile senkronize edebilir
kol saatleri. Wear OS cihazınız bir iOS cihazla eşlendiyse Veri Katmanı API'si
kullanın.
Bu nedenle, Veri Katmanı API'sini
iletişim kurmanın birincil yöntemidir. Bunun yerine
bir mobil uygulamayla aynı kalıbı kullanır ancak bazı küçük farklılıklar içerir.
Normalde DataItem
'i uygulamıyorsunuz
doğrudan ekleyebilirsiniz. Bunun yerine aşağıdakileri yaparsınız:
-
Bir oluştur
PutDataRequest
nesnesi, benzersiz bir şekilde tanımlamak için bir dize yolu belirtir öğedir. -
Ara:
Yükü ayarlamak için
setData()
. -
Senkronizasyondaki bir gecikme kullanıcı deneyimini olumsuz etkileyecekse
setUrgent()
değerleridir. -
Şu öğenin
putDataItem
yöntemini kullanın:DataClient
sınıfını kullanın.
Veri öğeleri istenirken, sistem aşağıdaki işlemleri düzgün şekilde uygulayan nesneleri döndürür:
DataItem
arayüzü. Ancak ham baytlarla çalışmak yerine
setData()
, şunları yapmanızı öneririz:
veri haritası kullanın,
Bundle
benzeri bir arayüzle veri öğesi gösterir.
Daha fazla bilgi için bkz. DataKatman Örnek uygulaması.
Verileri bir veri haritasıyla senkronize etme
Mümkün olduğunda,
DataMap
sınıfı.
Bu yaklaşım, veri öğeleriyle Android Bundle
,
Böylece sistem, nesne serileştirme ve seri durumdan çıkarma işlemlerini sizin için yapar. Siz de verileri değiştirebilir ve
100'den az olmalıdır.
Veri haritası kullanmak için:
-
Bir oluştur
PutDataMapRequest
nesnesini tanımlar. Veri öğesinin yolunu ayarlama.Not: Yol dizesi, olanak sağlayan bir veri öğesi içerir. Yol eğik çizgiyle başlamalıdır. Anahtar tablonuzda hiyerarşik veriler kullanıyorsanız verilerin yapısıyla eşleşen bir yol şeması oluşturun.
-
Ara:
Kullanabileceğiniz bir veri haritası edinmek için
PutDataMapRequest.getDataMap()
değerleri açık duruma getirin. -
Aşağıdaki gibi
put...()
yöntemlerini kullanarak veri haritası için değerler belirleyin:putString()
. -
Senkronizasyondaki bir gecikme kullanıcı deneyimini olumsuz etkileyecekse
setUrgent()
değerleridir. -
Ara:
PutDataMapRequest.asPutDataRequest()
PutDataRequest
nesnesini ifade eder. -
Şu öğenin
putDataItem
yöntemini kullanın:DataClient
sınıfını kullanın.Not: Telefon ve giyilebilir cihazların bağlantısı kesilirse Veriler arabelleğe alınır ve bağlantı yeniden kurulduğunda senkronize edilir.
Aşağıdaki örnekte yer alan increaseCounter()
yöntemi,
veri haritasının içine veri eklemeniz gerekir:
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); } ... }
Güncellemelerle ilgili daha fazla bilgi için
Tasks
için
referans belgeleri.
DataItem önceliğini ayarlayın
DataClient
API, acil durum senkronizasyonu için istek gönderilmesine izin verir:
DataItem
nesneler'i tıklayın.
Normalde sistem, veri öğelerinin teslimini geciktirir.
kullanıcı cihazlarının pil ömrünü uzatmak için Wear OS ağına
Veri öğelerinin senkronizasyonunda yaşanan bir gecikme kullanıcı deneyimini olumsuz yönde etkiliyorsa
isteyebilirsiniz. Örneğin, bir uzaktan kumanda uygulamasında kullanıcının cihazından
hemen yansıtılmasını sağlamak için sistemin veri öğelerinizi senkronize etmesini sağlayabilirsiniz.
numaralı telefonu arayarak
setUrgent()
değerleridir.
setUrgent()
adlı kişiyi aramazsanız sistem, öncesinde 30 dakika kadar gecikme yapabilir
senkronize edilmesine rağmen, genellikle gecikmenin birkaç dakika olmasını bekleyebilirsiniz.
dakika. Varsayılan acil durum acil değildir; bu nedenle
Şu andan itibaren geçerli senkronizasyon davranışını korumanız gerekiyorsa setUrgent()
Wear OS API'nin önceki sürümlerini kullanıyor.
Veri öğesi etkinliklerini dinleme
Veri katmanı bağlantısının bir tarafı veri öğesini değiştirirse bağlantının diğer tarafında değişiklik yapmadığını gösterir. Bunu, veri öğesi etkinlikleri için bir işleyici uygulayarak yapabilirsiniz.
Aşağıdaki örnekte yer alan kod snippet'i, önceki örnek değişikliklerinde tanımlanan sayaç:
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) { ... } ... }
Bu etkinlik,
DataClient.OnDataChangedListener
arayüzü. Etkinlik kendini ekler.
işleyicisi aracılığıyla
onResume()
yöntemini kullanır ve işleyiciyi
onPause()
yöntemini çağırın. Resimleri kullanarak bir uygulamayı görmek, modelleri görüntülemek ve
hakkında daha fazla bilgi için DataKatman Örneği
uygulamasını indirin.
İşleyiciyi bir hizmet olarak da uygulayabilirsiniz. Daha fazla bilgi için bkz. Veri Katmanı'nı dinle etkinlikler ile ilgili daha fazla bilgi edinin.