Bu belgede, Wear OS cihaz ile telefon arasında verilerin nasıl senkronize edileceği açıklanmaktadır. Data Layer API'yi ve altyapınızı ne zaman kullanacağınızı öğrenmek için genel bakış kılavuzuna bakın.
Verileri doğrudan ağdan gönderme ve senkronize etme
Doğrudan ağ ile iletişim kurmak için Wear OS uygulamaları oluşturun. Mobil geliştirme için kullandığınız API'leri kullanın ancak Wear OS'e özgü bazı farklılıkları göz önünde bulundurun.
Wear OS Veri Katmanı API'sini kullanarak verileri senkronize etme
DataClient, bileşenlerin DataItem veya Asset okuması ya da yazması için bir API sunar.
Herhangi bir cihaza bağlı değilken veri öğelerini ve öğeleri ayarlamak mümkündür. Cihazlar ağ bağlantısı kurduğunda senkronize edilir. Bu veriler uygulamanıza özeldir ve yalnızca diğer cihazlardaki uygulamanız tarafından erişilebilir.
DataItem, Wear OS ağındaki tüm cihazlarda senkronize edilir. Genellikle küçük boyutludur.Resim gibi daha büyük bir nesneyi aktarmak için
Assetkullanın. Sistem, hangi öğelerin aktarıldığını takip eder ve otomatik olarak tekilleştirme yapar.
Hizmetlerdeki etkinlikleri dinleme
WearableListenerService sınıfını genişletin. Sistem, temel WearableListenerService öğesinin yaşam döngüsünü yönetir. Veri öğeleri veya mesajlar göndermesi gerektiğinde hizmete bağlanır ve herhangi bir işlem yapılması gerekmediğinde hizmetle bağlantıyı keser.
Etkinliklerdeki olayları dinleme
OnDataChangedListener arayüzünü uygulayın. Yalnızca kullanıcı uygulamanızı aktif olarak kullanırken değişiklikleri dinlemek istediğinizde WearableListenerService yerine bu arayüzü kullanın.
description: Data Layer API'deki öğeleri kullanarak Android telefonlar ile Wear OS kol saatleri arasında resim gibi büyük ikili nesneleri aktarın. keywords_public: Wear OS, Data Layer API, öğeler, Bluetooth veri aktarımı, veri senkronizasyonu, DataMap, PutDataRequest
Verileri senkronize etme
Bluetooth aktarımı üzerinden büyük ikili nesneleri (ör. başka bir cihazdan alınan ses kaydı) paylaşmak için bir veri öğesine Asset ekleyebilir ve ardından veri öğesini kopyalanan veri deposuna yerleştirebilirsiniz.
Not: Veri Katmanı API'si, yalnızca Android veya Wear OS kol saati çalıştıran telefonlarla mesaj gönderebilir ve veri senkronizasyonu yapabilir. Wear OS cihaz bir iOS cihazla eşlenirse Veri Katmanı API'si çalışmaz.
Bu nedenle, ağ ile iletişim kurmak için birincil yöntem olarak Veri Katmanı API'sini kullanmayın. Bunun yerine, Wear OS uygulamanızda telefon uygulamasındakiyle aynı kalıbı kullanın. Wear OS'te ağ erişimi ve senkronizasyon bölümünde açıklandığı gibi bazı küçük farklılıklar vardır.
Öğeler, yeniden iletimi önlemek ve Bluetooth bant genişliğini korumak için verilerin önbelleğe alınmasını otomatik olarak yönetir. Yaygın bir yöntem, telefon uygulamasının bir resmi indirmesi, saatte gösterilmeye uygun bir boyuta küçültmesi ve öğe olarak saat uygulamasıyla paylaşmasıdır. Aşağıdaki örneklerde bu kalıp gösterilmektedir.
Öğe aktarma
Asset sınıfındaki create...() yöntemlerinden birini kullanarak öğeyi oluşturun. Bir bit eşlemi bayt dizisine dönüştürün ve ardından öğeyi oluşturmak için aşağıdaki örnekte gösterildiği gibi createFromBytes() yöntemini çağırın.
private fun createAssetFromBitmap(bitmap: Bitmap): Asset = ByteArrayOutputStream().let { byteStream -> bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteStream) Asset.createFromBytes(byteStream.toByteArray()) }
Ardından, DataMap veya PutDataRequest içindeki putAsset() yöntemini kullanarak öğeyi bir veri öğesine ekleyin. Ardından, aşağıdaki örneklerde gösterildiği gibi putDataItem() yöntemini kullanarak veri öğesini veri deposuna yerleştirin.
Aşağıdaki örnekte PutDataRequest kullanılmaktadır:
private fun Context.sendImagePutDataRequest(): Task<DataItem> { val asset: Asset = createAssetFromBitmap(BitmapFactory.decodeResource(resources, R.drawable.ic_walk)) val request: PutDataRequest = PutDataRequest.create("/image").apply { putAsset("profileImage", asset) } val putTask: Task<DataItem> = Wearable.getDataClient(this).putDataItem(request) return putTask }
Aşağıdaki örnekte PutDataMapRequest kullanılmaktadır:
private fun Context.sendImagePutDataMapRequest(): Task<DataItem> { val asset: Asset = createAssetFromBitmap(BitmapFactory.decodeResource(resources, R.drawable.ic_walk)) val request: PutDataRequest = PutDataMapRequest.create("/image").run { dataMap.putAsset("profileImage", asset) asPutDataRequest() } val putTask: Task<DataItem> = Wearable.getDataClient(this).putDataItem(request) return putTask }
Öğe alma
Bir öğe oluşturduktan sonra genellikle bağlantının diğer tarafında bu öğeyi okur ve ayıklarsınız. Aşağıdaki örnekte, öğe değişikliğini algılamak ve öğeyi ayıklamak için geri çağırma işlevinin nasıl uygulanacağı gösterilmektedir:
override fun onDataChanged(dataEvents: DataEventBuffer) { dataEvents .filter { it.type == DataEvent.TYPE_CHANGED && it.dataItem.uri.path == "/image" } .forEach { event -> val asset = DataMapItem.fromDataItem(event.dataItem) .dataMap.getAsset("profileImage") asset?.let { safeAsset -> lifecycleScope.launch { val bitmap = loadBitmapFromAsset(safeAsset) // Do something with the bitmap } } } } private suspend fun loadBitmapFromAsset(asset: Asset): Bitmap? = withContext(Dispatchers.IO) { try { val assetResult = Wearable.getDataClient(this@DataLayerActivity2) .getFdForAsset(asset) .await() assetResult?.inputStream?.use { inputStream -> BitmapFactory.decodeStream(inputStream) } } catch (e: Exception) { e.printStackTrace() null } }
Daha fazla bilgi için GitHub'daki DataLayer örnek projesine bakın.