এই ডকুমেন্ট থেকে জানা যাবে কীভাবে Wear OS ডিভাইস ও ফোনের মধ্যে ডেটা সিঙ্ক করতে হয়। কখন ডেটা লেয়ার API ব্যবহার করবেন এবং কখন আপনার ইনফ্রাস্ট্রাকচার ব্যবহার করবেন তা জানতে ওভারভিউ সংক্রান্ত নির্দেশিকা দেখুন।
নেটওয়ার্ক থেকে সরাসরি ডেটা পাঠান ও সিঙ্ক করুন
নেটওয়ার্কের সাথে সরাসরি যোগাযোগ করতে Wear OS অ্যাপ তৈরি করুন। মোবাইল ডেভেলপমেন্টের জন্য আপনি যে API ব্যবহার করেন, সেটিই ব্যবহার করুন, তবে Wear-OS-এর জন্য নির্দিষ্ট কিছু পার্থক্য মনে রাখুন।
Wear OS ডেটা লেয়ার API ব্যবহার করে ডেটা সিঙ্ক করুন
DataClient, DataItem বা Asset-এ রিড বা রাইট করার জন্য কম্পোনেন্টের উদ্দেশ্যে একটি API প্রকাশ করে।
কোনও ডিভাইসের সাথে কানেক্ট না থাকলেও ডেটা আইটেম ও অ্যাসেট সেট করা সম্ভব। ডিভাইসগুলি নেটওয়ার্ক কানেকশন তৈরি করলে সেগুলি সিঙ্ক করা হয়। এই ডেটা আপনার অ্যাপের জন্য ব্যক্তিগত এবং অন্যান্য ডিভাইসে শুধু আপনার অ্যাপই এটি অ্যাক্সেস করতে পারবে।
Wear OS নেটওয়ার্কে সব ডিভাইস জুড়ে
DataItemসিঙ্ক করা হয়। এগুলি সাধারণত আকারে ছোট হয়।ছবির মতো বড় অবজেক্ট ট্রান্সফার করতে
Assetব্যবহার করুন। কোন কোন অ্যাসেট আগে থেকেই ট্রান্সফার করা হয়েছে সিস্টেম সেটির ট্র্যাক রাখে এবং অটোমেটিক ডুপ্লিকেট সরিয়ে দেয়।
পরিষেবায় ইভেন্ট শুনুন
WearableListenerService ক্লাস এক্সটেন্ড করুন। সিস্টেমটি বেস WearableListenerService-এর লাইফসাইকেল ম্যানেজ করে, যখন ডেটা আইটেম বা মেসেজ পাঠানোর প্রয়োজন হয় তখন পরিষেবার সাথে বাইন্ড করে এবং কোনও কাজের প্রয়োজন না হলে পরিষেবাটি আনবাইন্ড করে।
অ্যাক্টিভিটিতে ইভেন্ট শুনুন
OnDataChangedListener ইন্টারফেস প্রয়োগ করুন। ব্যবহারকারী যখন আপনার অ্যাপ সক্রিয়ভাবে ব্যবহার করছেন, শুধু তখনই পরিবর্তন শুনতে চাইলে,
WearableListenerService-এর পরিবর্তে
এই ইন্টারফেস ব্যবহার করুন।
description: ডেটা লেয়ার API-তে অ্যাসেট ব্যবহার করে Android ফোন ও Wear OS স্মার্টওয়াচের মধ্যে ছবি সহ বড় বাইনারি অবজেক্ট ট্রান্সফার করুন। keywords_public: Wear OS, ডেটা লেয়ার API, অ্যাসেট, ব্লুটুথ ডেটা ট্রান্সফার, ডেটা সিঙ্ক, DataMap, PutDataRequest
ডেটা সিঙ্ক্রোনাইজ করুন
ব্লুটুথ ট্রান্সপোর্টের মাধ্যমে বড় বাইনারি অবজেক্ট শেয়ার করতে, যেমন অন্য ডিভাইস থেকে ভয়েস
রেকর্ডিং, আপনি ডেটা আইটেমে Asset অ্যাটাচ করতে পারেন
এবং তারপর ডেটা আইটেমটি রেপ্লিকেট করা ডেটাস্টোরে রাখতে পারেন।
মনে রাখবেন: ডেটা লেয়ার API শুধুমাত্র Android বা Wear OS স্মার্টওয়াচ চলে এমন ফোনের সাথে মেসেজ পাঠাতে এবং ডেটা সিঙ্ক করতে পারে। Wear OS ডিভাইস iOS ডিভাইসের সাথে পেয়ার করা থাকলে, ডেটা লেয়ার API কাজ করবে না।
এই কারণে, নেটওয়ার্কের সাথে যোগাযোগ করার প্রাথমিক উপায় হিসেবে ডেটা লেয়ার API ব্যবহার করবেন না। পরিবর্তে, আপনার Wear OS অ্যাপে ফোন অ্যাপের মতো একই প্যাটার্ন অনুসরণ করুন—কিছু ছোটখাটো পার্থক্য সহ, যেমন Wear OS-এ নেটওয়ার্ক অ্যাক্সেস এবং সিঙ্ক-এ বর্ণনা করা হয়েছে।
অ্যাসেট অটোমেটিক ডেটা ক্যাশিং ম্যানেজ করে যাতে ডেটা আবার ট্রান্সমিট করতে না হয় এবং ব্লুটুথ ব্যান্ডউইথ সাশ্রয় করা যায়। একটি সাধারণ প্যাটার্ন হল, ফোন অ্যাপের মাধ্যমে কোনও ছবি ডাউনলোড করা, স্মার্টওয়াচে দেখানোর জন্য উপযুক্ত সাইজে সেটি ছোট করা এবং অ্যাসেট হিসেবে স্মার্টওয়াচ অ্যাপে শেয়ার করা। নিম্নলিখিত উদাহরণগুলি এই প্যাটার্ন প্রদর্শন করে।
অ্যাসেট ট্রান্সফার করা
Asset ক্লাসের
create...()টি পদ্ধতির মধ্যে একটি ব্যবহার করে অ্যাসেট তৈরি করুন। বিটম্যাপকে বাইট অ্যারেতে কনভার্ট করুন এবং তারপরে অ্যাসেট তৈরি করতে
createFromBytes() কল করুন, যেমন নিম্নলিখিত
স্যাম্পেলে দেখানো হয়েছে।
private fun createAssetFromBitmap(bitmap: Bitmap): Asset = ByteArrayOutputStream().let { byteStream -> bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteStream) Asset.createFromBytes(byteStream.toByteArray()) }
এরপর, DataMap বা PutDataRequest-এ putAsset() পদ্ধতি ব্যবহার করে অ্যাসেটটি ডেটা আইটেমের সাথে অ্যাটাচ করুন। তারপর, নিম্নলিখিত স্যাম্পেলে যেভাবে দেখানো হয়েছে সেইভাবে putDataItem() পদ্ধতি ব্যবহার করে ডেটা আইটেমটি ডেটাস্টোরে রাখুন।
নিম্নলিখিত স্যাম্পেল PutDataRequest ব্যবহার করে:
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 }
নিম্নলিখিত স্যাম্পেলে PutDataMapRequest ব্যবহার করা হয়েছে:
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 }
অ্যাসেট রিসিভ করুন
অ্যাসেট তৈরি করার পরে, আপনি সাধারণত কানেকশনের অন্য প্রান্তে এটি পড়েন এবং এক্সট্র্যাক্ট করেন। অ্যাসেট পরিবর্তন শনাক্ত করতে এবং অ্যাসেট এক্সট্র্যাক্ট করতে কীভাবে কলব্যাক প্রয়োগ করতে হয় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
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 } }
আরও তথ্যের জন্য, GitHub-এ DataLayer স্যাম্পেল প্রোজেক্ট দেখুন।