Saat pengguna menjalani aktivitas sehari-hari, kacamata audio atau kacamata tampilan mereka mungkin
kehilangan koneksi ke perangkat host (seperti ponsel pengguna) atau
kacamata mereka mungkin tidak tersedia untuk sementara jika mereka melepas kacamata. Untuk
memperhitungkan jenis perubahan ketersediaan perangkat ini, aplikasi Anda dapat menggunakan
XR Device Availability API, yang menggabungkan sinyal ketersediaan perangkat ke dalam
nilai Lifecycle.State Android standar. Gunakan API ini untuk membantu mengelola perutean audio, aktivasi hotword, dan mengetahui kapan harus mengharapkan input pengguna berdasarkan ketersediaan kacamata.
Memahami status siklus proses
Tabel berikut mencantumkan cara sinyal ketersediaan perangkat dipetakan ke nilai Lifecycle.State.
Status siklus proses |
Status perangkat |
Deskripsi |
|---|---|---|
|
Dibuat |
Objek siklus proses dibuat, tetapi belum diamati. |
|
Tidak aktif |
Layanan terhubung, tetapi pengguna tidak memakai perangkat. |
|
Aktif |
Pengguna memakai perangkat. |
|
Tidak terhubung |
Perangkat terputus atau koneksi layanan terputus. |
Memeriksa dan memantau ketersediaan perangkat
Untuk memeriksa dan memantau ketersediaan perangkat, Anda akan menggunakan konteks yang diproyeksikan bersama dengan status siklus proses untuk menentukan cara aplikasi Anda menangani setiap kasus:
// In your phone activity or service, check for projected device connection state before // attempting to create a projected device context and get the device lifecycle. ProjectedContext.isProjectedDeviceConnected(context, currentCoroutineContext()) .flatMapLatest { isConnected -> if (isConnected) { try { // Create the projected device context on connection val projectedContext = ProjectedContext.createProjectedDeviceContext(context) val xrDevice = XrDevice.getCurrentDevice(projectedContext) // Get the device lifecycle xrDevice.getLifecycle().currentStateFlow } catch (e: IllegalStateException) { flowOf(Lifecycle.State.DESTROYED) } } else { flowOf(Lifecycle.State.DESTROYED) } } .collect { state -> when (state) { Lifecycle.State.STARTED -> { /* Device is available (worn) */ } Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ } Lifecycle.State.DESTROYED -> { /* Device is disconnected from host phone */ } else -> { /* Handle other states */ } } } }
Poin-poin penting tentang kode
- Memeriksa koneksi: Sebelum mengakses siklus proses perangkat, panggil
ProjectedContext.isProjectedDeviceConnecteduntuk memverifikasi bahwa perangkat yang diproyeksikan terhubung ke perangkat host. - Mendapatkan
ProjectedContext: Hanya panggilProjectedContext.createProjectedDeviceContextsetelah memverifikasi koneksi, dan pastikan Anda meneruskan konteks ini ke instanceXrDevice. - Menangani pembatalan konteks:
deviceIdbaru dibuat setiap kali perangkat yang diproyeksikan terhubung. Setelah status mencapaiDESTROYED,ProjectedContextsaat ini tidak valid. Segera hentikan penggunaannya, dan tunggu koneksi baru. - Mengoptimalkan baterai dan resource: Tangani fungsi aplikasi dengan baik
berdasarkan status siklus proses untuk mempertahankan resource sistem dan mengurangi konserei
baterai. Misalnya, Anda harus merilis resource khusus kacamata, seperti aliran data kamera, saat status bertransisi dari
STARTEDkembali keCREATED. StatusCREATEDmenunjukkan bahwa perangkat tidak lagi dipakai, sehingga menghentikan proses ini sangat penting untuk mencegah pengurasan baterai yang tidak perlu dan meningkatkan privasi pengguna.