Memeriksa ketersediaan perangkat saat runtime untuk kacamata audio dan kacamata layar

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Kacamata Audio &
Tampilan

Saat pengguna menjalani aktivitas sehari-hari, kacamata pintar audio atau kacamata pintar dengan layar mereka mungkin kehilangan koneksi ke perangkat host (seperti ponsel pengguna) atau kacamata mereka mungkin tidak tersedia untuk sementara jika mereka melepas kacamata. Untuk memperhitungkan perubahan ketersediaan perangkat semacam 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 kata kunci, dan untuk mengetahui kapan input pengguna diharapkan 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

INITIALIZED

Dibuat

Objek siklus proses dibuat, tetapi belum diamati.

CREATED

Tidak aktif

Layanan terhubung, tetapi pengguna tidak memakai perangkat.

STARTED

Aktif

Pengguna memakai perangkat.

DESTROYED

Tidak terhubung

Perangkat terputus atau koneksi layanan hilang.

RESUMED

T/A

Siklus proses perangkat saat ini tidak menggunakan atau memancarkan status ini.

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 harus 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 penting tentang kode

  • Periksa koneksi: Sebelum mengakses siklus proses perangkat, panggil ProjectedContext.isProjectedDeviceConnected untuk memverifikasi bahwa perangkat yang diproyeksikan terhubung ke perangkat host.
  • Dapatkan ProjectedContext: Hanya panggil ProjectedContext.createProjectedDeviceContext setelah memverifikasi koneksi, dan pastikan Anda meneruskan konteks ini ke instance XrDevice Anda.
  • Menangani pembatalan validasi konteks: deviceId baru dibuat setiap kali perangkat yang diproyeksikan terhubung. Setelah status mencapai DESTROYED, ProjectedContext saat ini tidak valid. Segera berhenti menggunakannya, dan tunggu koneksi baru.
  • Mengoptimalkan baterai dan resource: Tangani fungsi aplikasi dengan baik berdasarkan status siklus proses untuk menghemat resource sistem dan mengurangi konsumsi baterai. Misalnya, Anda harus melepaskan resource khusus kacamata, seperti aliran data kamera, saat transisi status dari STARTED kembali ke CREATED. Status CREATED menunjukkan bahwa perangkat tidak lagi dipakai, sehingga menghentikan proses ini sangat penting untuk mencegah baterai cepat habis yang tidak perlu dan untuk meningkatkan privasi pengguna.