空間功能可能會隨著使用者與應用程式或系統互動而變更,甚至可能會由應用程式本身變更,例如移至首頁空間或全螢幕模式。為避免發生問題,應用程式需要檢查空間功能,以判斷目前環境支援哪些 API。
使用適用於 XR 的 Jetpack Compose 檢查空間功能
適用於 XR 的 Jetpack Compose 會建立 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 程式庫時,您必須建立工作階段。建立工作階段後,請呼叫工作階段的 spatialCapabilities
,查詢目前可用的空間功能。
SPATIAL_CAPABILITY_3D_CONTENT
:活動可建立 3D 內容。SPATIAL_CAPABILITY_APP_ENVIRONMENT
:活動可以設定自己的環境。SPATIAL_CAPABILITY_EMBED_ACTIVITY
:活動可在空間中嵌入其他活動。SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
:活動可啟用或停用直通功能。SPATIAL_CAPABILITY_SPATIAL_AUDIO
:活動可使用空間音訊。SPATIAL_CAPABILITY_UI
:活動可以將自身轉換為空間化,例如新增空間化資訊面板。
您也可以選擇訂閱回呼 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 ) ) { // ... }