런타임에 오디오 글라스 및 디스플레이 글라스의 기기 사용 가능 여부 확인

적용 가능한 XR 기기
이 안내는 이러한 유형의 XR 기기용 환경을 구축하는 데 도움이 됩니다.
오디오 및
디스플레이 안경

사용자가 하루를 보내는 동안 오디오 글라스나 디스플레이 글라스가 호스트 기기 (예: 사용자의 휴대전화)와의 연결이 끊어지거나 글라스를 벗으면 글라스를 일시적으로 사용할 수 없게 될 수 있습니다. 이러한 기기 사용 가능 여부의 변경사항을 고려하기 위해 앱은 기기 사용 가능 여부 신호를 표준 Android Lifecycle.State 값으로 통합하는 XR 기기 사용 가능 여부 API를 사용할 수 있습니다. 이 API를 사용하여 오디오 라우팅, 핫워드 활성화를 관리하고 글래스를 사용할 수 있는 시점을 기반으로 사용자 입력을 예상할 수 있습니다.

수명 주기 상태 이해

다음 표에는 기기 사용 가능 여부 신호가 Lifecycle.State 값에 매핑되는 방식이 나와 있습니다.

수명 주기 상태

기기 상태

설명

INITIALIZED

생성 날짜

수명 주기 객체가 생성되었지만 아직 관찰되지 않았습니다.

CREATED

비활성

서비스가 연결되어 있지만 사용자가 기기를 착용하고 있지 않습니다.

STARTED

활성

사용자가 기기를 착용하고 있습니다.

DESTROYED

연결 끊김

기기 연결이 끊어졌거나 서비스 연결이 끊어졌습니다.

기기 사용 가능 여부 확인 및 모니터링

기기의 사용 가능 여부를 확인하고 모니터링하려면 예상 컨텍스트를 수명 주기 상태와 함께 사용하여 앱이 각 사례를 처리하는 방법을 결정합니다.

    // 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 */ }
            }
        }
}

코드에 관한 핵심 사항

  • 연결 확인: 기기 수명 주기에 액세스하기 전에 ProjectedContext.isProjectedDeviceConnected를 호출하여 프로젝션된 기기가 호스트 기기에 연결되어 있는지 확인합니다.
  • ProjectedContext 획득: 연결을 확인한 후에만 ProjectedContext.createProjectedDeviceContext을 호출하고 이 컨텍스트를 XrDevice 인스턴스에 전달해야 합니다.
  • 컨텍스트 무효화 처리: 프로젝션된 기기가 연결될 때마다 새 deviceId가 생성됩니다. 상태가 DESTROYED에 도달하면 현재 ProjectedContext이 잘못됩니다. 즉시 사용을 중지하고 새 연결을 기다립니다.
  • 배터리 및 리소스 최적화: 수명 주기 상태에 따라 앱 기능을 적절하게 처리하여 시스템 리소스를 보존하고 배터리 소비를 줄입니다. 예를 들어 상태가 STARTED에서 CREATED로 다시 전환되면 카메라 데이터 스트림과 같은 글래스 관련 리소스를 해제해야 합니다. CREATED 상태는 기기를 더 이상 착용하지 않음을 나타내므로 불필요한 배터리 소모를 방지하고 사용자 개인 정보를 보호하려면 이러한 프로세스를 중지해야 합니다.