डिवाइस को चालू करने के बाद, इन ट्रेट का इस्तेमाल किया जा सकता है:
OtaSoftwareUpdateRequestor ट्रेट
इस ट्रेट की मदद से, कैमरा डिवाइस पर ओटीए सॉफ़्टवेयर अपडेट की निगरानी की जा सकती है. डिवाइस को चालू करने के बाद, कैमरा अपडेट की प्रोसेस शुरू करता है और ऐप्लिकेशन को इसकी स्थिति की जानकारी देता है. ऐप्लिकेशन को सॉफ़्टवेयर अपडेट पूरा होने की जानकारी मिलने के बाद, कैमरा लाइव स्ट्रीम करना शुरू कर सकता है.
यहां दिए गए सैंपल कोड और जानकारी से पता चलता है कि इस ट्रेट का इस्तेमाल कैसे किया जा सकता है.
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ऑपरेटर, अपडेट की प्रोसेस तब तक जारी रखता है, जब तक ओटीएupdateStateटर्मिनल स्थिति (जैसे, सफल या फ़ेल) में नहीं पहुंच जाता.स्थिति की जानकारी इकट्ठा करना: स्थिति में हर बदलाव के लिए,
.collectब्लॉक को एक्ज़ीक्यूट किया जाता है इससे, ट्रेट से मिली नई वैल्यू के साथupdateStateऔरupdateStateProgressवैरिएबल अपडेट हो जाते हैं.
ज़्यादा जानकारी के लिए, OtaSoftwareUpdateRequestor ट्रेट का रेफ़रंस देखें.
ConfigurationDone ट्रेट
कैमरा चालू करने के लिए, इस ट्रेट की ज़रूरत नहीं होती. हालांकि, इसकी मदद से ऐप्लिकेशन यह ट्रैक कर सकता है कि डिवाइस पूरी तरह से सेट अप हो गया है और इस्तेमाल किया जा सकता है. इसके लिए, AppConfigurationComplete एट्रिब्यूट को true पर सेट करना होगा.
इस ट्रेट का इस्तेमाल, OtaSoftwareUpdateRequestor ट्रेट के बाद किया जाना चाहिए.
device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }