डिवाइस को चालू करने के बाद, इन ट्रेट का इस्तेमाल किया जा सकता है:
OtaSoftwareUpdateRequestor trait
इस ट्रेट की मदद से, कैमरा डिवाइस पर सॉफ़्टवेयर के ओटीए अपडेट को मॉनिटर किया जा सकता है. कमीशन किए जाने के बाद, कैमरा अपडेट शुरू करता है और ऐप्लिकेशन को इसकी स्थिति के बारे में बताता है. जब ऐप्लिकेशन को यह सूचना मिलती है कि सॉफ़्टवेयर अपडेट पूरा हो गया है, तब कैमरा लाइव स्ट्रीमिंग शुरू कर सकता है.
यहां दिए गए सैंपल कोड और जानकारी से पता चलता है कि इस ट्रेट का इस्तेमाल कैसे किया जा सकता है.
withTimeout(OTA_TIMEOUT_MS) {
device.type(OtaRequestorDevice)
.mapNotNull { it?.trait(OtaSoftwareUpdateRequestor) }
.distinctUntilChanged()
.transformWhile { trait ->
emit(trait)
!isTerminalState(trait.updateState)
}
.collect { trait ->
updateState = trait.updateState
updateStateProgress = trait.updateStateProgress
}
}
टाइम आउट:
withTimeout, मॉनिटरिंग की प्रोसेस के लिए ज़्यादा से ज़्यादा अवधि (OTA_TIMEOUT_MS) तय करता है. अगर इस अवधि में अपडेट पूरा नहीं होता है, तो यह टाइम आउट हो जाता है.ट्रेट में हुए बदलावों को मॉनिटर करना:
.distinctUntilChanged()ऑपरेटर यह पक्का करता है कि चेन में मौजूद अगला कोड सिर्फ़ तब काम करे, जब ट्रेट की स्थिति में बदलाव हो. इससे यह लगातार पोलिंग करने से ज़्यादा असरदार हो जाता है.प्रोसेस पूरी होने तक:
.transformWhileऑपरेटर, अपडेट को तब तक प्रोसेस करता रहता है, जब तक कि OTAupdateStateकी स्थिति, फ़ाइनल स्थिति (जैसे कि प्रोसेस पूरी हुई या प्रोसेस पूरी नहीं हुई) में नहीं पहुंच जाती.डेटा इकट्ठा करने की स्थिति: स्थिति में हर बदलाव के लिए,
.collectब्लॉक को लागू किया जाता है, ताकिupdateStateऔरupdateStateProgressवैरिएबल को ट्रेट से मिली नई वैल्यू के साथ अपडेट किया जा सके.
ज़्यादा जानकारी के लिए, OtaSoftwareUpdateRequestor ट्रेट का रेफ़रंस देखें.
ConfigurationDone trait
कैमरा चालू करने के लिए, इस ट्रेट की ज़रूरत नहीं होती. हालांकि, इससे ऐप्लिकेशन को यह ट्रैक करने में मदद मिलती है कि डिवाइस कब पूरी तरह से सेट अप हो गया है और इस्तेमाल के लिए तैयार है. इसके लिए, AppConfigurationComplete एट्रिब्यूट को true पर सेट किया जाता है.
इस ट्रेट का इस्तेमाल, OtaSoftwareUpdateRequestor ट्रेट के बाद किया जाना चाहिए.
device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }