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

ব্যবহারকারীরা যখন একটি 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. আপনার মোবাইল অ্যাপের বিল্ড ফাইলে, Google Play পরিষেবাগুলিতে পরিধেয় লাইব্রেরির সর্বশেষ সংস্করণের উপর নির্ভরতা অন্তর্ভুক্ত করুন:

    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)
                }
            }
        }
    }

{% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %} {% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %}