DataItem
उस इंटरफ़ेस को तय करता है जिसका इस्तेमाल सिस्टम, हैंडहेल्ड और पहनने योग्य डिवाइसों के बीच डेटा को सिंक करने के लिए करता है. DataItem में आम तौर पर ये कॉम्पोनेंट शामिल होते हैं:
- Payload: यह एक बाइट ऐरे होता है, जिसे डेटा के साथ सेट किया जा सकता है. इससे आपको ऑब्जेक्ट को क्रमबद्ध और क्रम से हटाने की सुविधा मिलती है. पेलोड का साइज़ 100 केबी से ज़्यादा नहीं होना चाहिए.
-
पाथ: यह एक यूनीक स्ट्रिंग होती है. यह फ़ॉरवर्ड स्लैश से शुरू होनी चाहिए. जैसे,
"/path/to/data".
ध्यान दें:
Data Layer API, सिर्फ़ Android फ़ोन या Wear OS वाली घड़ियों के साथ मैसेज भेज सकता है और डेटा सिंक कर सकता है. अगर आपका Wear OS डिवाइस, iOS डिवाइस के साथ पेयर किया गया है, तो Data Layer API काम नहीं करेगा.
इसलिए, नेटवर्क से कम्यूनिकेट करने के लिए, Data Layer API का इस्तेमाल मुख्य तरीके के तौर पर न करें. इसके बजाय,
मोबाइल ऐप्लिकेशन की तरह ही पैटर्न का इस्तेमाल करें. हालांकि, इसमें थोड़ा-बहुत अंतर हो सकता है.
आम तौर पर, DataItem को सीधे तौर पर लागू नहीं किया जाता. इसके बजाय, यह तरीका अपनाएं:
-
एक
PutDataRequestऑब्जेक्ट बनाएं. इसमें आइटम की खास पहचान करने के लिए, स्ट्रिंग पाथ तय करें. -
पेलोड सेट करने के लिए,
setData()को कॉल करें. -
अगर सिंक होने में देरी की वजह से उपयोगकर्ता अनुभव पर बुरा असर पड़ता है, तो
setUrgent()को कॉल करें. -
सिस्टम से डेटा आइटम बनाने का अनुरोध करने के लिए,
DataClientक्लास केputDataItemतरीके का इस्तेमाल करें.
डेटा आइटम का अनुरोध करने पर, सिस्टम ऐसे ऑब्जेक्ट दिखाता है जो DataItem इंटरफ़ेस को सही तरीके से लागू करते हैं. हालांकि, हमारा सुझाव है कि setData() का इस्तेमाल करके रॉ बाइट के साथ काम करने के बजाय, डेटा मैप का इस्तेमाल करें. इससे Bundle जैसे इंटरफ़ेस के साथ डेटा आइटम दिखता है.
ज़्यादा जानकारी के लिए, DataLayer Sample ऐप्लिकेशन देखें.
डेटा मैप की मदद से डेटा सिंक करना
जब संभव हो, तब
DataMap क्लास का इस्तेमाल करें.
इस तरीके से, Android Bundle के तौर पर डेटा आइटम के साथ काम किया जा सकता है. इसलिए, सिस्टम आपके लिए ऑब्जेक्ट सीरियलाइज़ेशन और डीसीरियलाइज़ेशन करता है. साथ ही, की-वैल्यू पेयर की मदद से डेटा में बदलाव किया जा सकता है.
डेटा मैप का इस्तेमाल करने के लिए:
-
डेटा आइटम का पाथ सेट करके,
PutDataMapRequestऑब्जेक्ट बनाएं.ध्यान दें: पाथ स्ट्रिंग, डेटा आइटम के लिए एक यूनीक आइडेंटिफ़ायर होता है. इसकी मदद से, कनेक्शन के दोनों ओर से डेटा आइटम को ऐक्सेस किया जा सकता है. पाथ, फ़ॉरवर्ड स्लैश से शुरू होना चाहिए. अगर आपको अपने ऐप्लिकेशन में क्रमबद्ध डेटा का इस्तेमाल करना है, तो डेटा के स्ट्रक्चर से मेल खाने वाली पाथ स्कीम बनाएं.
-
डेटा मैप पाने के लिए
PutDataMapRequest.getDataMap()को कॉल करें. इस डेटा मैप पर वैल्यू सेट की जा सकती हैं. -
put...()तरीकों का इस्तेमाल करके, डेटा मैप के लिए वैल्यू सेट करें. जैसे,putString(). -
अगर सिंक होने में देरी की वजह से उपयोगकर्ता अनुभव पर बुरा असर पड़ता है, तो
setUrgent()को कॉल करें. -
PutDataRequestऑब्जेक्ट पाने के लिए,PutDataMapRequest.asPutDataRequest()को कॉल करें. -
सिस्टम से डेटा आइटम बनाने का अनुरोध करने के लिए,
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 का इस्तेमाल करने से पहले, यह देख लें कि यह किसी डिवाइस पर उपलब्ध है या नहीं. ऐसा न करने पर, एक अपवाद होता है. GoogleApiAvailability क्लास का इस्तेमाल करें. इसे Horologist में लागू किया गया है.
DataItem की प्राथमिकता सेट करना
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 का सैंपल ऐप्लिकेशन देखें.
लिसनर को सेवा के तौर पर भी लागू किया जा सकता है. ज़्यादा जानकारी के लिए, डेटा लेयर के इवेंट के बारे में सुनना लेख पढ़ें.