AI グラスの実行時にデバイスの可用性を確認する

ユーザーが 1 日を過ごす中で、AI グラスがホスト デバイス(ユーザーのスマートフォンなど)との接続を失ったり、グラスを外したときに一時的に使用できなくなったりすることがあります。このようなデバイスの可用性の変化に対応するため、アプリでは XR デバイス可用性 API を使用できます。この API は、デバイスの可用性シグナルを標準の Android Lifecycle.State 値に統合します。この API を使用すると、オーディオ ルーティングやホットワードの有効化を管理したり、AI メガネが使用可能なときにユーザー入力を予測したりできます。

ライフサイクルの状態について

次の表に、デバイスの可用性シグナルが Lifecycle.State 値にどのようにマッピングされるかを示します。

ライフサイクルの状態

デバイスのステータス

説明

INITIALIZED

作成日

ライフサイクル オブジェクトは作成されましたが、まだ監視されていません。

CREATED

無効

サービスは接続されていますが、ユーザーがデバイスを装着していません。

STARTED

有効

ユーザーがデバイスを装着しています。

DESTROYED

未接続

デバイスが切断されているか、サービス接続が失われています。

デバイスの可用性を確認してモニタリングする

デバイスの可用性を確認してモニタリングするには、投影されたコンテキストとライフサイクル状態を使用して、アプリが各ケースをどのように処理するかを判断します。

    val xrDevice = XrDevice.getCurrentDevice(projectedContext)

    xrDevice.getLifecycle().currentStateFlow
        .takeWhile { it != Lifecycle.State.DESTROYED }
        .collect { state ->
            when (state) {
                Lifecycle.State.STARTED -> { /* Device is ACTIVE (worn) */ }
                Lifecycle.State.CREATED -> { /* Device is INACTIVE (not worn) */ }
                else -> { /* Handle other states */ }
            }
        }
}

コードに関する主なポイント

  • 接続を確認する: デバイスのライフサイクルにアクセスする前に、 ProjectedContext.isProjectedDeviceConnected を呼び出して、 投影されたデバイスがホスト デバイスに接続されていることを確認します。
  • ProjectedContext を取得する: 接続を確認した後でのみ ProjectedContext.createProjectedDeviceContext を呼び出し、このコンテキストを XrDevice インスタンスに渡します。
  • コンテキストの無効化を処理する: 投影されたデバイスが接続されるたびに、新しいdeviceIdが生成されます。状態が DESTROYED になると、現在の ProjectedContext は無効になります。すぐに使用を停止し、新しい接続を待ちます。
  • バッテリーとリソースを最適化する: ライフサイクル状態に基づいてアプリの機能を適切に処理し、システム リソースを保持してバッテリー消費量を削減します。たとえば、状態が STARTED から CREATED に戻った場合は、カメラ データ ストリームなど、メガネ固有のリソースを解放する必要があります。CREATED 状態は、デバイスが装着されていないことを示します。そのため、不要なバッテリーの消耗を防ぎ、ユーザーのプライバシーを保護するには、これらのプロセスを停止することが不可欠です。