Bu belgede, Wear OS cihaz ile telefon arasındaki verilerin nasıl senkronize edileceği açıklanmaktadır. Veri katmanı API'sinin ve altyapınızın ne zaman kullanılacağıyla ilgili genel bakış kılavuzuna bakın.
Verileri doğrudan ağdan gönderme ve senkronize etme
Doğrudan ağla 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 Data Layer API'yi kullanarak verileri senkronize etme
Bir DataClient, bileşenlerin DataItem veya Asset'ye okuma ya da yazma işlemi yapması için bir API sunar.
Herhangi bir cihaza bağlı değilken veri öğelerini ve öğeleri ayarlayabilirsiniz. Cihazlar ağ bağlantısı kurduğunda senkronize edilir. Bu veriler uygulamanıza özeldir ve diğer cihazlarda yalnızca uygulamanız tarafından erişilebilir.
DataItem, Wear OS ağındaki tüm cihazlarda senkronize edilir. Genellikle küçük boyutludurlar.Resim gibi daha büyük bir nesneyi aktarmak için
Assetsimgesini kullanın. Sistem, hangi öğelerin aktarıldığını takip eder ve otomatik olarak yinelenen öğeleri kaldırır.
Hizmetlerdeki etkinlikleri dinleme
WearableListenerService sınıfını genişletin. Sistem, temel WearableListenerService'nın yaşam döngüsünü yönetir. Veri öğeleri veya mesajlar göndermesi gerektiğinde hizmete bağlanır, iş gerekmediğinde ise hizmetin bağlantısını kaldırır.
Etkinliklerdeki etkinlikleri dinleme
OnDataChangedListener arayüzünü uygulayın. Yalnızca kullanıcı uygulamanızı etkin olarak kullanırken değişiklikleri dinlemek istediğinizde WearableListenerService yerine bu arayüzü kullanın.
description: Veri Katmanı API'sindeki Varlıklar'ı kullanarak Android telefonlar ve Wear OS kol saatleri arasında resim gibi büyük ikili nesneleri aktarın. keywords_public: Wear OS, Data Layer API, Assets, Bluetooth data transfer, data synchronization, DataMap, PutDataRequest
Verileri senkronize etme
Bluetooth üzerinden büyük ikili nesneler (ör. başka bir cihazdan alınan ses kaydı) paylaşmak için bir veri öğesine Asset ekleyebilir ve ardından veri öğesini çoğaltılmış veri deposuna yerleştirebilirsiniz.
Not: Veri Katmanı API'si yalnızca Android yüklü telefonlar veya Wear OS yüklü akıllı saatlerle mesaj gönderebilir ve verileri senkronize edebilir. Bir Wear OS cihazı 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, Wear OS'te ağ erişimi ve senkronizasyon bölümünde açıklandığı gibi, Wear OS uygulamanızda telefon uygulamasındakiyle aynı deseni izleyin.
Öğeler, yeniden iletimi önlemek ve Bluetooth bant genişliğini korumak için verilerin önbelleğe alınmasını otomatik olarak yönetir. Telefon uygulamasının bir resmi indirip saatte görüntülenmek üzere uygun bir boyuta küçülterek saat uygulamasıyla öğe olarak paylaşması yaygın bir yöntemdir. Aşağıdaki örneklerde bu yöntem 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 aşağıdaki örnekte gösterildiği gibi öğeyi oluşturmak için createFromBytes() işlevini ç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, öğeyi DataMap veya PutDataRequest içinde putAsset() yöntemiyle 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ılmıştı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ılmıştı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 okuyup 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.