ডেটা লেয়ার API এর সাথে ডেটা আইটেম সিঙ্ক করুন

একটি DataItem হ্যান্ডহেল্ড এবং পরিধেয় ডিভাইসের মধ্যে ডেটা সিঙ্ক্রোনাইজ করার জন্য সিস্টেম যে ইন্টারফেস ব্যবহার করে তা সংজ্ঞায়িত করে। একটি DataItem সাধারণত নিম্নলিখিত উপাদানগুলি নিয়ে গঠিত:

  • পেলোড: একটি বাইট অ্যারে যা আপনি ডেটা দিয়ে সেট করতে পারেন, যা আপনাকে আপনার নিজস্ব অবজেক্ট সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন করতে দেয়। পেলোডের আকার 100 KB পর্যন্ত সীমাবদ্ধ।
  • পাথ: একটি অনন্য স্ট্রিং যা অবশ্যই একটি ফরোয়ার্ড স্ল্যাশ দিয়ে শুরু হবে, যেমন "/path/to/data"

দ্রষ্টব্য: ডেটা লেয়ার API শুধুমাত্র Android ফোন বা Wear OS ঘড়ির সাথে বার্তা পাঠাতে এবং ডেটা সিঙ্ক্রোনাইজ করতে পারে। যদি আপনার Wear OS ডিভাইসটি iOS ডিভাইসের সাথে পেয়ার করা থাকে, তাহলে ডেটা লেয়ার API কাজ করবে না।

এই কারণে, নেটওয়ার্কের সাথে যোগাযোগের প্রাথমিক উপায় হিসেবে ডেটা লেয়ার API ব্যবহার করবেন না। পরিবর্তে, কিছু ছোটখাটো পার্থক্য সহ মোবাইল অ্যাপের মতো একই প্যাটার্ন অনুসরণ করুন।

আপনি সাধারণত DataItem সরাসরি বাস্তবায়ন করেন না। পরিবর্তে, আপনি নিম্নলিখিতগুলি করেন:

  1. আইটেমটিকে অনন্যভাবে সনাক্ত করার জন্য একটি স্ট্রিং পাথ নির্দিষ্ট করে একটি PutDataRequest অবজেক্ট তৈরি করুন।
  2. পেলোড সেট করতে setData() কল করুন।
  3. যদি সিঙ্কিংয়ে বিলম্ব ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব ফেলে, তাহলে setUrgent() কল করুন।
  4. সিস্টেমকে ডেটা আইটেম তৈরি করার অনুরোধ করতে DataClient ক্লাসের putDataItem পদ্ধতি ব্যবহার করুন।

ডেটা আইটেম অনুরোধ করার সময়, সিস্টেমটি এমন বস্তুগুলি ফেরত দেয় যা সঠিকভাবে DataItem ইন্টারফেস বাস্তবায়ন করে। তবে, setData() ব্যবহার করে raw বাইট নিয়ে কাজ করার পরিবর্তে, আমরা আপনাকে একটি ডেটা ম্যাপ ব্যবহার করার পরামর্শ দিচ্ছি, যা একটি Bundle মতো ইন্টারফেস সহ একটি ডেটা আইটেম প্রকাশ করে।

আরও তথ্যের জন্য, DataLayer Sample অ্যাপটি দেখুন।

ডেটা ম্যাপের সাথে ডেটা সিঙ্ক করুন

যখন সম্ভব, DataMap ক্লাস ব্যবহার করুন। এই পদ্ধতিটি আপনাকে Android Bundle আকারে ডেটা আইটেমগুলির সাথে কাজ করতে দেয়, যাতে সিস্টেমটি আপনার জন্য অবজেক্ট সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন করে এবং আপনি কী-মান জোড়া দিয়ে ডেটা ম্যানিপুলেট করতে পারেন।

একটি ডেটা ম্যাপ ব্যবহার করতে:

  1. ডেটা আইটেমের পাথ সেট করে একটি PutDataMapRequest অবজেক্ট তৈরি করুন।

    দ্রষ্টব্য: পাথ স্ট্রিং হল ডেটা আইটেমের জন্য একটি অনন্য শনাক্তকারী যা আপনাকে সংযোগের উভয় দিক থেকে এটি অ্যাক্সেস করতে দেয়। পাথটি অবশ্যই একটি ফরোয়ার্ড স্ল্যাশ দিয়ে শুরু হতে হবে। আপনি যদি আপনার অ্যাপে হায়ারার্কিকাল ডেটা ব্যবহার করেন, তাহলে ডেটার কাঠামোর সাথে মেলে এমন একটি পাথ স্কিম তৈরি করুন।

  2. PutDataMapRequest.getDataMap() এ কল করে একটি ডেটা ম্যাপ পান যার উপর আপনি মান সেট করতে পারেন।
  3. put...() পদ্ধতি ব্যবহার করে ডেটা ম্যাপের জন্য মান সেট করুন, যেমন putString()
  4. যদি সিঙ্কিংয়ে বিলম্ব ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব ফেলে, তাহলে setUrgent() কল করুন।
  5. একটি PutDataRequest অবজেক্ট পেতে PutDataMapRequest.asPutDataRequest() এ কল করুন।
  6. সিস্টেমকে ডেটা আইটেম তৈরি করার অনুরোধ করতে DataClient ক্লাসের putDataItem পদ্ধতি ব্যবহার করুন।

    দ্রষ্টব্য: যদি হ্যান্ডসেট এবং পরিধেয় ডিভাইসগুলি সংযোগ বিচ্ছিন্ন থাকে, তাহলে সংযোগ পুনঃস্থাপিত হলে ডেটা বাফার এবং সিঙ্ক হয়।

নিম্নলিখিত উদাহরণে increaseCounter() পদ্ধতিটি দেখায় কিভাবে একটি ডেটা ম্যাপ তৈরি করতে হয় এবং এতে ডেটা রাখতে হয়:

private fun increaseCounter() {
    val putDataReq: PutDataRequest = PutDataMapRequest.create("/count").run {
        dataMap.putInt(COUNT_KEY, count++)
        asPutDataRequest()
    }
    val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq)
}

Tasks পরিচালনা সম্পর্কে আরও তথ্যের জন্য, রেফারেন্স ডকুমেন্টেশন দেখুন।

সতর্কতা: Wearable Data Layer API ব্যবহার করার আগে, এটি কোনও ডিভাইসে উপলব্ধ কিনা তা পরীক্ষা করে নিন; অন্যথায়, একটি ব্যতিক্রম ঘটতে পারে। Horologist এ বাস্তবায়িত GoogleApiAvailability ক্লাসটি ব্যবহার করুন।

ডেটাআইটেমের অগ্রাধিকার সেট করুন

DataClient API DataItem অবজেক্ট সিঙ্ক করার জন্য জরুরি অনুরোধের অনুমতি দেয়। সাধারণত, ব্যবহারকারীর ডিভাইসের ব্যাটারি লাইফ উন্নত করার জন্য সিস্টেম Wear OS নেটওয়ার্কে ডেটা আইটেম ডেলিভারি বিলম্বিত করে, কিন্তু যদি ডেটা আইটেম সিঙ্ক করতে বিলম্ব ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব ফেলে, তাহলে আপনি সেগুলিকে জরুরি হিসাবে চিহ্নিত করতে পারেন। উদাহরণস্বরূপ, একটি রিমোট কন্ট্রোল অ্যাপে যেখানে ব্যবহারকারী আশা করেন যে তাদের ক্রিয়াগুলি অবিলম্বে প্রতিফলিত হবে, আপনি setUrgent() কল করে সিস্টেমকে আপনার ডেটা আইটেমগুলি অবিলম্বে সিঙ্ক করতে দিতে পারেন।

যদি আপনি setUrgent() কল না করেন, তাহলে সিস্টেমটি জরুরি নয় এমন ডেটা আইটেম সিঙ্ক করার আগে 30 মিনিট পর্যন্ত বিলম্ব করতে পারে, যদিও আপনি সাধারণত বিলম্বটি মাত্র কয়েক মিনিটের আশা করতে পারেন। ডিফল্ট জরুরিতা হল জরুরি নয়, তাই Wear OS API-এর পূর্ববর্তী সংস্করণগুলির তাৎক্ষণিক-সিঙ্ক আচরণ বজায় রাখার প্রয়োজন হলে আপনাকে অবশ্যই setUrgent() ব্যবহার করতে হবে।

ডেটা আইটেম ইভেন্টগুলি শুনুন

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

পূর্ববর্তী উদাহরণে সংজ্ঞায়িত কাউন্টারের মান পরিবর্তিত হলে নিম্নলিখিত উদাহরণের কোড স্নিপেট অ্যাপটিকে অবহিত করে:

override fun onDataChanged(dataEvents: DataEventBuffer) {

    dataEvents.forEach { event ->
        // DataItem changed
        if (event.type == DataEvent.TYPE_CHANGED) {
            event.dataItem.also { item ->
                if (item.uri.path?.compareTo("/count") == 0) {
                    DataMapItem.fromDataItem(item).dataMap.apply {
                        updateCount(getInt(COUNT_KEY))
                    }
                }
            }
        } else if (event.type == DataEvent.TYPE_DELETED) {
            // DataItem deleted
        }
    }
}

এই অ্যাক্টিভিটি DataClient.OnDataChangedListener ইন্টারফেসটি বাস্তবায়ন করে। অ্যাক্টিভিটিটি onResume() পদ্ধতির ভিতরে ডেটা আইটেম ইভেন্টের জন্য নিজেকে শ্রোতা হিসেবে যুক্ত করে এবং onPause() পদ্ধতিতে শ্রোতাকে সরিয়ে দেয়। ছবি, মডেল এবং পরিষেবা ব্যবহার করে একটি বাস্তবায়ন দেখতে, DataLayer Sample অ্যাপটি দেখুন।

আপনি লিসেনারকে একটি পরিষেবা হিসেবেও বাস্তবায়ন করতে পারেন। আরও তথ্যের জন্য, লিসেন ফর ডেটা লেয়ার ইভেন্ট দেখুন।