ユーザーが 1 日を過ごす中で、オーディオ グラスやディスプレイ グラスが
ホスト デバイス(ユーザーのスマートフォンなど)との接続を失うことがあります。また、グラスを外すと一時的に使用できなくなることもあります。このようなデバイスの可用性の変化に対応するため、アプリでは
XR Device Availability API を使用できます。この API は、デバイスの可用性シグナルを
標準の Android Lifecycle.State 値に統合します。この API を使用すると、オーディオ ルーティングやホットワードの有効化を管理しやすくなります。また、グラスが使用可能になったときにユーザー入力がいつ発生するかを把握できます。
ライフサイクルの状態を理解する
次の表に、デバイスの可用性シグナルが Lifecycle.State 値にどのようにマッピングされるかを示します。
ライフサイクルの状態 |
デバイスのステータス |
説明 |
|---|---|---|
|
作成日時 |
ライフサイクル オブジェクトが作成されたが、まだ監視されていない。 |
|
無効 |
サービスは接続されているが、ユーザーがデバイスを装着していない。 |
|
有効 |
ユーザーがデバイスを装着している。 |
|
未接続 |
デバイスが切断されているか、サービス接続が失われている。 |
デバイスの可用性を確認してモニタリングする
デバイスの可用性を確認してモニタリングするには、投影されたコンテキストとライフサイクルの状態を使用して、アプリが各ケースをどのように処理すべきかを判断します。
// 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状態は、デバイスが装着されていないことを示します。そのため、不要なバッテリーの消耗を防ぎ、ユーザーのプライバシーを保護するには、これらのプロセスを停止することが不可欠です。