檢查空間功能

空間功能可能會隨著使用者與應用程式或系統互動而變更,甚至可能會由應用程式本身變更,例如進入主畫面或全螢幕模式。為避免發生問題,應用程式需要檢查空間功能,以判斷目前環境支援哪些 API。

使用 XR 專用的 Jetpack Compose 檢查空間功能

XR 版 Jetpack Compose 會建立組合式本機,用於檢查空間功能。可用於檢查是否已啟用空間 UI、空間音訊、環境、直通或 3D 內容。

您可以使用 LocalSpatialCapabilities.current 檢查目前是否提供下列空間功能:

以下範例說明如何檢查是否已啟用空間 UI。

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

使用 SceneCore 檢查空間功能

使用 SceneCore 程式庫時,您必須建立工作階段。建立工作階段後,請在工作階段上呼叫 getSpatialCapabilities,查詢目前可用的空間功能。

您也可以選擇訂閱回呼 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(...)
      }
   }
});

另請參閱