একটি DataItem সেই ইন্টারফেসকে সংজ্ঞায়িত করে, যা সিস্টেম হ্যান্ডহেল্ড এবং ওয়্যারেবল ডিভাইসগুলোর মধ্যে ডেটা সিঙ্ক্রোনাইজ করতে ব্যবহার করে। একটি DataItem সাধারণত নিম্নলিখিত উপাদানগুলো নিয়ে গঠিত:
- পেলোড: একটি বাইট অ্যারে যা আপনি ডেটা দিয়ে সেট করতে পারেন, যার মাধ্যমে আপনি নিজের অবজেক্ট সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন করতে পারবেন। পেলোডের আকার ১০০ কিলোবাইটে সীমাবদ্ধ।
- পাথ: একটি অনন্য স্ট্রিং যা অবশ্যই একটি ফরওয়ার্ড স্ল্যাশ দিয়ে শুরু হতে হবে, যেমন
"/path/to/data"।
দ্রষ্টব্য: ডেটা লেয়ার এপিআই শুধুমাত্র অ্যান্ড্রয়েড ফোন বা ওয়্যার ওএস ঘড়ির সাথে মেসেজ পাঠাতে এবং ডেটা সিঙ্ক্রোনাইজ করতে পারে। যদি আপনার ওয়্যার ওএস ডিভাইসটি কোনো আইওএস ডিভাইসের সাথে পেয়ার করা থাকে, তাহলে ডেটা লেয়ার এপিআই কাজ করবে না।
এই কারণে, কোনো নেটওয়ার্কের সাথে যোগাযোগের প্রধান মাধ্যম হিসেবে ডেটা লেয়ার এপিআই (Data Layer API) ব্যবহার করবেন না। এর পরিবর্তে, কিছু সামান্য পার্থক্যসহ একটি মোবাইল অ্যাপের পদ্ধতিই অনুসরণ করুন।
সাধারণত আপনি সরাসরি DataItem ইমপ্লিমেন্ট করেন না। এর পরিবর্তে, আপনি নিম্নলিখিত কাজটি করেন:
- আইটেমটিকে অনন্যভাবে শনাক্ত করার জন্য একটি স্ট্রিং পাথ উল্লেখ করে একটি
PutDataRequestঅবজেক্ট তৈরি করুন। - পেলোড সেট করতে
setData()কল করুন। - যদি সিঙ্ক করতে দেরি হওয়ার কারণে ব্যবহারকারীর অভিজ্ঞতার ওপর নেতিবাচক প্রভাব পড়ে, তাহলে
setUrgent()কল করুন। - সিস্টেমকে ডেটা আইটেম তৈরি করার অনুরোধ জানাতে
DataClientক্লাসেরputDataItemমেথডটি ব্যবহার করুন।
ডেটা আইটেম অনুরোধ করার সময়, সিস্টেম এমন অবজেক্ট ফেরত দেয় যা DataItem ইন্টারফেসটি সঠিকভাবে ইমপ্লিমেন্ট করে। তবে, setData() ব্যবহার করে সরাসরি বাইট নিয়ে কাজ করার পরিবর্তে, আমরা একটি ডেটা ম্যাপ ব্যবহার করার পরামর্শ দিই, যা Bundle মতো একটি ইন্টারফেসের মাধ্যমে একটি ডেটা আইটেম প্রদান করে।
আরও তথ্যের জন্য, DataLayer Sample অ্যাপটি দেখুন।
ডেটা ম্যাপের সাথে ডেটা সিঙ্ক করুন
সম্ভব হলে DataMap ক্লাস ব্যবহার করুন। এই পদ্ধতিটি আপনাকে একটি অ্যান্ড্রয়েড Bundle আকারে ডেটা আইটেমগুলির সাথে কাজ করার সুযোগ দেয়, ফলে সিস্টেম আপনার জন্য অবজেক্ট সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন করে দেয় এবং আপনি কী-ভ্যালু পেয়ার ব্যবহার করে ডেটা পরিচালনা করতে পারেন।
ডেটা ম্যাপ ব্যবহার করতে:
- ডেটা আইটেমের পাথ সেট করে একটি
PutDataMapRequestঅবজেক্ট তৈরি করুন।দ্রষ্টব্য: পাথ স্ট্রিং হলো ডেটা আইটেমের একটি অনন্য শনাক্তকারী, যা আপনাকে কানেকশনের উভয় দিক থেকে এটি অ্যাক্সেস করতে দেয়। পাথটি অবশ্যই একটি ফরওয়ার্ড স্ল্যাশ দিয়ে শুরু হতে হবে। আপনি যদি আপনার অ্যাপে হায়ারারকিক্যাল ডেটা ব্যবহার করেন, তবে ডেটার কাঠামোর সাথে মেলে এমন একটি পাথ স্কিম তৈরি করুন।
- একটি ডেটা ম্যাপ পেতে
PutDataMapRequest.getDataMap()কল করুন, যেটিতে আপনি মান নির্ধারণ করতে পারবেন। -
put...()মেথড, যেমনputString()ব্যবহার করে ডেটা ম্যাপের জন্য মান নির্ধারণ করুন। - যদি সিঙ্ক করতে দেরি হওয়ার কারণে ব্যবহারকারীর অভিজ্ঞতার ওপর নেতিবাচক প্রভাব পড়ে, তাহলে
setUrgent()কল করুন। - একটি
PutDataRequestঅবজেক্ট পেতেPutDataMapRequest.asPutDataRequest()কল করুন। - সিস্টেমকে ডেটা আইটেম তৈরি করার অনুরোধ জানাতে
DataClientক্লাসেরputDataItemমেথডটি ব্যবহার করুন।দ্রষ্টব্য: হ্যান্ডসেট এবং পরিধানযোগ্য ডিভাইসগুলোর সংযোগ বিচ্ছিন্ন হয়ে গেলে, ডেটা বাফার হয়ে যায় এবং সংযোগ পুনরায় স্থাপিত হলে তা সিঙ্ক হয়।
নিচের উদাহরণে increaseCounter() মেথডটি দেখায় কিভাবে একটি ডেটা ম্যাপ তৈরি করতে হয় এবং তাতে ডেটা রাখতে হয়:
private fun increaseCounter(): Task<DataItem> { val putDataReq: PutDataRequest = PutDataMapRequest.create("/count").run { dataMap.putInt(COUNT_KEY, count++) asPutDataRequest() } return Wearable.getDataClient(this) .putDataItem(putDataReq) }
Tasks পরিচালনা সম্পর্কে আরও তথ্যের জন্য, রেফারেন্স ডকুমেন্টেশন দেখুন।
সতর্কতা: Wearable Data Layer API ব্যবহার করার আগে, এটি ডিভাইসে উপলব্ধ আছে কিনা তা যাচাই করে নিন; অন্যথায়, একটি ব্যতিক্রম ঘটবে। Horologist- এ বাস্তবায়িত GoogleApiAvailability ক্লাসটি ব্যবহার করুন।
ডেটাআইটেমের অগ্রাধিকার সেট করুন
DataClient API-এর মাধ্যমে DataItem অবজেক্ট সিঙ্ক করার জন্য জরুরি অনুরোধ করা যায়। সাধারণত, ব্যবহারকারীর ডিভাইসের ব্যাটারি লাইফ উন্নত করার জন্য সিস্টেম Wear OS নেটওয়ার্কে ডেটা আইটেম সরবরাহ করতে দেরি করে, কিন্তু ডেটা আইটেম সিঙ্ক করার এই বিলম্ব যদি ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব ফেলে, তবে আপনি সেগুলোকে জরুরি হিসেবে চিহ্নিত করতে পারেন। উদাহরণস্বরূপ, একটি রিমোট কন্ট্রোল অ্যাপে যেখানে ব্যবহারকারী আশা করেন যে তার কার্যকলাপ তাৎক্ষণিকভাবে প্রতিফলিত হবে, সেখানে আপনি setUrgent() কল করে সিস্টেমকে দিয়ে আপনার ডেটা আইটেমগুলো অবিলম্বে সিঙ্ক করাতে পারেন।
আপনি যদি setUrgent() কল না করেন, তাহলে সিস্টেমটি জরুরি নয় এমন ডেটা আইটেম সিঙ্ক করার আগে ৩০ মিনিট পর্যন্ত দেরি করতে পারে, যদিও সাধারণত এই বিলম্ব মাত্র কয়েক মিনিট হবে বলে আশা করা যায়। ডিফল্ট জরুরি অবস্থা হলো 'জরুরি নয়', তাই 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 স্যাম্পল অ্যাপটি দেখুন।
আপনি লিসেনারটিকে একটি সার্ভিস হিসেবেও প্রয়োগ করতে পারেন। আরও তথ্যের জন্য, ‘ডেটা লেয়ার ইভেন্ট লিসেন করুন’ দেখুন।