Ciri-ciri pasca-penyiapan untuk orientasi kamera

Trait yang dapat digunakan setelah perangkat diaktifkan adalah:

Trait OtaSoftwareUpdateRequestor

Trait ini menyediakan antarmuka untuk memantau update software OTA di perangkat kamera. Setelah diaktifkan, kamera akan memulai update dan melaporkan statusnya ke aplikasi. Setelah aplikasi menerima status bahwa update software telah selesai, kamera dapat mulai melakukan livestreaming.

Contoh kode dan penjelasan berikut menunjukkan cara penggunaan trait ini.

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
    }
}
  • Batas waktu: withTimeout menerapkan durasi maksimum (OTA_TIMEOUT_MS) untuk proses pemantauan. Jika update tidak selesai dalam waktu ini, waktu akan habis.

  • Mengamati perubahan trait: Operator .distinctUntilChanged() memastikan bahwa kode berikutnya dalam rantai hanya bereaksi saat status trait benar-benar berubah, sehingga lebih efisien daripada polling konstan.

  • Memproses hingga selesai: Operator .transformWhile terus memproses update selama updateState OTA bukan status terminal (seperti berhasil atau gagal).

  • Mengumpulkan status: Untuk setiap perubahan status, blok .collect dijalankan untuk mengupdate variabel updateState dan updateStateProgress dengan nilai terbaru dari trait.

Untuk mengetahui informasi selengkapnya, lihat referensi trait OtaSoftwareUpdateRequestor.

Trait ConfigurationDone

Trait ini tidak diperlukan untuk aktivasi kamera, tetapi memungkinkan aplikasi melacak kapan perangkat disiapkan sepenuhnya dan dapat digunakan dengan menetapkan atribut AppConfigurationComplete ke true. Trait ini harus digunakan setelah trait OtaSoftwareUpdateRequestor.

device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }