DataItem, sistemin elde taşınabilir cihazlar ve giyilebilir cihazlar arasında verileri senkronize etmek için kullandığı arayüzü tanımlar. Bir DataItem genellikle aşağıdaki bileşenlerden oluşur:
- Yük: Verilerle ayarlayabileceğiniz bir bayt dizisi. Bu sayede kendi nesne serileştirme ve seri durumdan çıkarma işlemlerinizi yapabilirsiniz. Yükün boyutu 100 KB ile sınırlıdır.
-
Yol: Eğik çizgiyle başlaması gereken benzersiz bir dize (ör.
"/path/to/data").
Not:
Data Layer API yalnızca Android telefonlar veya Wear OS kol saatleriyle mesaj gönderebilir ve verileri senkronize edebilir. Wear OS cihazınız bir iOS cihazla eşlenmişse Data Layer API çalışmaz.
Bu nedenle, Data Layer API'yi bir ağla iletişim kurmanın birincil yolu olarak kullanmayın. Bunun yerine,
bazı küçük farklılıklarla birlikte mobil uygulamayla aynı deseni izleyin.
Normalde DataItem'ı doğrudan uygulamazsınız. Bunun yerine aşağıdakileri yapın:
-
Öğeyi benzersiz şekilde tanımlamak için dize yolu belirterek
PutDataRequestnesnesi oluşturun. -
Yükü ayarlamak için
setData()işlevini çağırın. -
Senkronizasyondaki bir gecikme kullanıcı deneyimini olumsuz etkileyecekse
setUrgent()numaralı telefonu arayın. -
Sistemden veri öğesi oluşturmasını istemek için
DataClientsınıfınınputDataItemyöntemini kullanın.
Sistem, veri öğeleri istenirken DataItem arayüzünü düzgün şekilde uygulayan nesneleri döndürür. Ancak setData() kullanarak ham baytlarla çalışmak yerine, Bundle benzeri bir arayüzle veri öğesini kullanıma sunan veri haritası kullanmanızı öneririz.
Daha fazla bilgi için DataLayer Sample uygulamasına bakın.
Verileri veri haritasıyla senkronize etme
Mümkün olduğunda
DataMap sınıfını kullanın.
Bu yaklaşım, Android Bundle biçimindeki veri öğeleriyle çalışmanıza olanak tanır. Böylece sistem, nesne serileştirme ve seri durumdan çıkarma işlemlerini sizin için yapar ve anahtar/değer çiftleriyle verileri değiştirebilirsiniz.
Veri haritası kullanmak için:
-
Veri öğesinin yolunu ayarlayarak bir
PutDataMapRequestnesnesi oluşturun.Not: Yol dizesi, veri öğesinin benzersiz tanımlayıcısıdır ve bağlantının her iki tarafından da erişmenizi sağlar. Yol, eğik çizgiyle başlamalıdır. Uygulamanızda hiyerarşik veriler kullanıyorsanız verilerin yapısıyla eşleşen bir yol şeması oluşturun.
-
Değerleri ayarlayabileceğiniz bir veri haritası almak için
PutDataMapRequest.getDataMap()numaralı telefonu arayın. -
put...()yöntemlerini kullanarak veri haritası için değerler ayarlayın. Örneğin:putString(). -
Senkronizasyondaki bir gecikme kullanıcı deneyimini olumsuz etkileyecekse
setUrgent()işlevini çağırın. -
PutDataMapRequest.asPutDataRequest()numaralı telefonu arayarakPutDataRequestnesnesi edinin. -
Sistemin veri öğesini oluşturmasını istemek için
DataClientsınıfınınputDataItemyöntemini kullanın.Not: Cep telefonu ile giyilebilir cihazların bağlantısı kesilirse, veriler arabelleğe alınır ve bağlantı yeniden kurulduğunda senkronize edilir.
Aşağıdaki örnekteki increaseCounter() yöntemi, nasıl veri haritası oluşturulacağını ve bu haritaya nasıl veri yerleştirileceğini gösterir:
private fun increaseCounter() { val putDataReq: PutDataRequest = PutDataMapRequest.create("/count").run { dataMap.putInt(COUNT_KEY, count++) asPutDataRequest() } val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq) }
Tasks işleme hakkında daha fazla bilgi için
referans belgelerine bakın.
Dikkat:
Wearable Data Layer API'yi kullanmadan önce API'nin cihazda kullanılabilir olduğunu kontrol edin. Aksi takdirde istisna oluşur. Horologist'te uygulandığı gibi GoogleApiAvailability sınıfını kullanın.
DataItem önceliğini ayarlama
DataClient API'si, DataItem
nesnelerinin senkronizasyonu için acil isteklerin gönderilmesine olanak tanır.
Normalde sistem, kullanıcı cihazlarının pil ömrünü iyileştirmek için veri öğelerinin Wear OS ağına teslimini geciktirir. Ancak veri öğelerinin senkronize edilmesindeki gecikme kullanıcı deneyimini olumsuz etkiliyorsa bu öğeleri acil olarak işaretleyebilirsiniz. Örneğin, kullanıcının işlemlerinin anında yansıtılmasını beklediği bir uzaktan kumanda uygulamasında,
setUrgent() işlevini çağırarak sistemin veri öğelerinizi anında senkronize etmesini sağlayabilirsiniz.
setUrgent() işlevini çağırmazsanız sistem, acil olmayan veri öğelerini senkronize etmeden önce 30 dakikaya kadar gecikme yaşayabilir. Ancak genellikle gecikmenin yalnızca birkaç dakika sürmesi beklenir. Varsayılan aciliyet düzeyi acil değildir. Bu nedenle, Wear OS API'nin önceki sürümlerindeki anında senkronizasyon davranışını korumanız gerekiyorsa setUrgent() kullanmanız gerekir.
Veri öğesi etkinliklerini dinleme
Veri katmanı bağlantısının bir tarafı bir veri öğesini değiştirirse bağlantının diğer tarafındaki değişiklikler hakkında kullanıcıyı bilgilendirin. Bunu, veri öğesi etkinlikleri için bir dinleyici uygulayarak yapabilirsiniz.
Aşağıdaki örnekteki kod snippet'i, önceki örnekte tanımlanan sayacın değeri değiştiğinde uygulamayı bilgilendirir:
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 } } }
Bu etkinlik,
DataClient.OnDataChangedListener arayüzünü uygular. Etkinlik, onResume() yöntemindeki veri öğesi etkinlikleri için kendisini işleyici olarak ekler ve onPause() yönteminde işleyiciyi kaldırır. Resimler, görüntü modelleri ve hizmetlerin kullanıldığı bir uygulamayı görmek için DataLayer Sample uygulamasını inceleyin.
Dinleyiciyi hizmet olarak da uygulayabilirsiniz. Daha fazla bilgi için Veri katmanı etkinliklerini dinleme başlıklı makaleyi inceleyin.