একটি নতুন মোবাইল ডিভাইসে Wear OS ডেটা স্থানান্তর করুন

যখন ব্যবহারকারীরা একটি Wear OS ডিভাইস সেট আপ করেন , তখন তারা ডিভাইসটিকে একটি নির্দিষ্ট মোবাইল ডিভাইসের সাথে সংযুক্ত করেন। ব্যবহারকারী পরবর্তীতে একটি নতুন মোবাইল ডিভাইস কেনার সিদ্ধান্ত নিতে পারেন এবং তাদের বর্তমান Wear OS ডিভাইসটিকে সেই নতুন মোবাইল ডিভাইসের সাথে সংযুক্ত করতে পারেন। একটি Wear OS ডিভাইস সম্পর্কিত কিছু ডেটা বর্তমানে সংযুক্ত মোবাইল ডিভাইসটিতে সংরক্ষিত থাকে।

Wear OS 4 থেকে শুরু করে, ব্যবহারকারীরা যখন কোনো নতুন মোবাইল ডিভাইসের সাথে সংযোগ স্থাপন করেন, তখন তারা Wear OS ডেটা সেই নতুন মোবাইল ডিভাইসে স্থানান্তর করতে পারেন। ডেটা স্থানান্তর করার সময় তা স্বয়ংক্রিয়ভাবে সিঙ্ক হয়ে যায়।

যখন ব্যবহারকারী ডেটা স্থানান্তরের অনুরোধ করেন, তখন ওয়্যারেবল ডেটা লেয়ার একটি মোবাইল ডিভাইসে সংরক্ষিত DataItem অবজেক্টগুলোকে অন্য মোবাইল ডিভাইসে পৌঁছে দেয়। এটি আপনার অ্যাপের ব্যবহারকারীদের জন্য একটি নির্বিঘ্ন অভিজ্ঞতা নিশ্চিত করে।

এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে, কীভাবে আপনি আপনার Wear OS অ্যাপ এবং এর সহযোগী মোবাইল অ্যাপটিকে এই সিনারিও সমর্থন করার জন্য কনফিগার করতে পারেন।

প্রস্তুতি

ডেটা স্থানান্তর প্রক্রিয়াটি DataItem অবজেক্টগুলিকে ভিন্নভাবে পরিচালনা করে, যা নির্ভর করে কোন অ্যাপ ডেটার মালিক তার উপর:

Wear OS অ্যাপের মালিকানাধীন বস্তুসমূহ
এই বস্তুগুলো Wear OS ডিভাইসে সংরক্ষিত থাকে।
মোবাইল অ্যাপের মালিকানাধীন বস্তুসমূহ

এই অবজেক্টগুলো পুরোনো ডিভাইসে আর্কাইভ করা হয়। এরপর সিস্টেমটি আর্কাইভ করা ডেটাগুলোকে একটি DataItemBuffer অবজেক্টে প্যাকেজ করে এবং নতুন মোবাইল ডিভাইসে ইনস্টল করা মোবাইল অ্যাপে এই ডেটা সরবরাহ করে।

আর্কাইভটি ডেলিভার হওয়ার ঠিক পরেই, Wearable Data Layer, onNodeMigrated() লিসেনারটিকে কল করে, ঠিক যেমন Wear OS ডিভাইস থেকে ডেটা লেখা হলে আপনার অ্যাপকে জানানো হয়।

স্থানান্তরিত ডেটা সংরক্ষণ করুন

স্থানান্তরিত DataItem অবজেক্টগুলো সংরক্ষণ করা আপনার অ্যাপের দায়িত্ব। নতুন মোবাইল ডিভাইসে ডেটা পৌঁছে যাওয়ার কিছুক্ষণ পরেই পুরানো ডিভাইস থেকে আর্কাইভটি মুছে ফেলা হয়।

নিচের প্রতিটি শর্ত সত্য কিনা তা নিশ্চিত করুন:

  1. স্থানান্তরের সাথে জড়িত উভয় মোবাইল ডিভাইসেই আপনার অ্যাপটি ইনস্টল করা আছে।
  2. প্রতিটি মোবাইল ডিভাইসে ইনস্টল করা মোবাইল অ্যাপগুলোর প্যাকেজ সিগনেচার মিলে যায়।

অন্যথায়, আর্কাইভ করা DataItem অবজেক্টগুলো সরবরাহ করা হয় না এবং এর পরিবর্তে বাতিল করে দেওয়া হয়।

পুরানো মোবাইল ডিভাইস থেকে ডেটা গ্রহণ করুন

পুরানো মোবাইল ডিভাইসে আর্কাইভ করা ডেটা নতুন মোবাইল ডিভাইসে গ্রহণ করার জন্য, আপনার মোবাইল অ্যাপকে অবশ্যই WearableListenerService ক্লাসের অংশ onNodeMigrated() কলব্যাকটি ইমপ্লিমেন্ট করতে হবে। এটি করার জন্য, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:

  1. আপনার মোবাইল অ্যাপের বিল্ড ফাইলে, গুগল প্লে সার্ভিসে থাকা ওয়্যারেবল লাইব্রেরির সর্বশেষ সংস্করণের একটি ডিপেন্ডেন্সি অন্তর্ভুক্ত করুন:

    dependencies {
        ...
        implementation 'com.google.android.gms:play-services-wearable:19.0.0'
    }
  2. আপনার অ্যাপের ম্যানিফেস্ট ফাইলে WearableListenerService টি ডিক্লেয়ার এবং এক্সপোর্ট করুন:

    <service
        android:name=".snippets.datalayer.MyWearableListenerService"
        android:exported="true"
        tools:ignore="ExportedService">
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.NODE_MIGRATED" />
            <data android:scheme="wear" android:host="*" />
        </intent-filter>
    </service>

  3. একটি সার্ভিস ক্লাস তৈরি করুন যা WearableListenerService এক্সটেন্ড করে এবং onNodeMigrated() ফাংশনটিকে ওভাররাইড করে।

    class MyWearableListenerService : WearableListenerService() {
        val dataClient: DataClient = Wearable.getDataClient(this)
    
        private fun shouldHandleDataItem(nodeId: String, dataItem: DataItem): Boolean {
            // Your logic here
            return dataItem.uri.path?.startsWith("/my_feature_path/") == true
        }
    
        private fun handleDataItem(nodeId: String, dataItem: DataItem) {
            val data = dataItem.data ?: return
            val path = dataItem.uri.path ?: return
            // Your logic here
            if (data.toString().startsWith("Please restore")) {
                dataClient.putDataItem(PutDataRequest.create(path).setData(data))
            }
        }
    
        override fun onNodeMigrated(nodeId: String, archive: DataItemBuffer) {
            val dataItemsToHandle = mutableListOf<DataItem>()
    
            for (dataItem in archive) {
                if (shouldHandleDataItem(nodeId, dataItem)) {
                    dataItemsToHandle.add(dataItem.freeze())
                }
            }
    
            // Callback stops automatically after 20 seconds of data processing.
            // If you think you need more time, delegate to a coroutine or thread.
            runBlocking {
                for (dataItem in dataItemsToHandle) {
                    handleDataItem(nodeId, dataItem)
                }
            }
        }
    }

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}