空間機能を確認する

空間認識機能は、ユーザーがアプリやシステムを操作する際に変更される場合があります。また、ホームスペースやフルスペースに移動するなど、アプリ自体によって変更される場合もあります。問題を回避するには、アプリで空間機能をチェックして、現在の環境でサポートされている API を特定する必要があります。

Jetpack Compose for XR を使用して空間機能を確認する

Jetpack Compose for XR は、空間機能をチェックするための Composition Local を作成します。空間 UI、空間オーディオ、環境、パススルー、3D コンテンツが有効になっているかどうかを確認できます。

LocalSpatialCapabilities.current を使用すると、現在次の空間機能が使用可能かどうかを確認できます。

  • isSpatialUiEnabled: アプリケーションが空間 UI 要素(SpatialPanel など)を作成できるかどうかを示します。
  • isContent3dEnabled: アプリが 3D オブジェクトを作成できるかどうかを示します。
  • isAppEnvironmentEnabled: アプリケーションが環境を設定できるかどうかを示します。
  • isPassthroughControlEnabled: アプリケーションがパススルー状態を制御できるかどうかを示します。
  • isSpatialAudioEnabled: アプリが空間オーディオを使用できるかどうかを示します。

次の例は、空間 UI が有効かどうかを確認する方法を示しています。

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

SceneCore を使用して空間機能を確認する

SceneCore ライブラリを使用する場合は、セッションを作成する必要があります。セッションが作成されたら、セッションで getSpatialCapabilities を呼び出して、現在使用可能な空間機能のクエリを実行します。

空間機能が変更されたときに通知するコールバック(addSpatialCapabilitiesChangedListener)をサブスクライブすることもできます。

// Example 1: check if enabling passthrough mode is allowed
if (xrSession.getSpatialCapabilities().hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
    )
) {
    xrSession.spatialEnvironment.setPassthroughOpacityPreference(0f)
}
// Example 2: multiple capability flags can be checked simultaneously:
if (xrSession.getSpatialCapabilities().hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL and
            SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT
    )
) {
    // ...
}

関連ドキュメント