空間功能可能會隨著使用者與應用程式或系統互動而變更,甚至可能會由應用程式本身變更,例如進入主畫面或全螢幕模式。為避免發生問題,應用程式需要檢查空間功能,以判斷目前環境支援哪些 API。
使用 XR 專用的 Jetpack Compose 檢查空間功能
XR 版 Jetpack Compose 會建立組合式本機,用於檢查空間功能。可用於檢查是否已啟用空間 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
,查詢目前可用的空間功能。
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
,在空間功能變更時通知您。
val xrSession = Session.create(this)
// 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)) {
// ...
}
// Example 3: Create a spatialized panel if/when spatialization UI becomes available
xrSession.addSpatialCapabilitiesChangedListener((capabilities) -> {
if (capabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)){
Subspace{
SpatialPanel(...)
}
}
});