检查空间能力

空间能力会随着用户与应用或系统的交互而改变,甚至可以由应用本身改变——例如,进入 Home Space 或 Full Space。为避免问题,您的应用需要检查空间能力以确定当前环境中支持哪些 API。

使用 Jetpack Compose for XR 检查空间能力

Jetpack Compose for XR 创建了一个 Composition Local 来检查空间能力。使用它来检查是否启用了空间 UI、空间音频、环境、直通或 3D 内容。

您可以使用 LocalSpatialCapabilities.current 来检查以下空间能力当前是否可用

以下示例展示了如何检查空间 UI 是否已启用

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

使用 SceneCore 检查空间能力

使用 SceneCore 库时,您需要创建一个会话。创建会话后,在会话上调用 spatialCapabilities 以查询当前哪些空间能力可用。

您还可以选择订阅回调,addSpatialCapabilitiesChangedListener,它会在空间能力改变时通知您。

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

另请参阅