Các đặc điểm có thể dùng sau khi thiết bị được thiết lập là:
Đặc điểm OtaSoftwareUpdateRequestor
Đặc điểm này cung cấp một giao diện để theo dõi bản cập nhật phần mềm OTA trên thiết bị camera. Sau khi được thiết lập, camera sẽ bắt đầu quá trình cập nhật và báo cáo trạng thái của quá trình này cho ứng dụng. Sau khi ứng dụng nhận được trạng thái cho biết quá trình cập nhật phần mềm đã hoàn tất, camera có thể bắt đầu phát trực tiếp.
Đoạn mã mẫu và nội dung giải thích sau đây minh hoạ cách sử dụng đặc điểm này.
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
}
}
Thời gian chờ:
withTimeoutáp dụng thời lượng tối đa (OTA_TIMEOUT_MS) cho quy trình giám sát. Nếu quá trình cập nhật không hoàn tất trong thời gian này, thì quá trình sẽ hết thời gian chờ.Theo dõi các thay đổi về đặc điểm: Toán tử
.distinctUntilChanged()đảm bảo rằng mã tiếp theo trong chuỗi chỉ phản ứng khi trạng thái của đặc điểm thực sự thay đổi, điều này giúp mã hiệu quả hơn so với việc liên tục thăm dò.Xử lý cho đến khi hoàn tất: Toán tử
.transformWhiletiếp tục xử lý các bản cập nhật miễn là OTAupdateStatekhông phải là trạng thái kết thúc (chẳng hạn như thành công hoặc thất bại).Thu thập trạng thái: Đối với mỗi thay đổi trạng thái, khối
.collectsẽ được thực thi để cập nhật các biếnupdateStatevàupdateStateProgressbằng các giá trị mới nhất từ đặc điểm.
Để biết thêm thông tin, hãy tham khảo tài liệu tham khảo về đặc điểm OtaSoftwareUpdateRequestor.
Đặc điểm ConfigurationDone
Đặc điểm này không bắt buộc để kích hoạt camera, nhưng cho phép ứng dụng theo dõi thời điểm thiết bị được thiết lập đầy đủ và có thể sử dụng bằng cách đặt thuộc tính AppConfigurationComplete thành true.
Bạn nên sử dụng đặc điểm này sau đặc điểm OtaSoftwareUpdateRequestor.
device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }