Проверка пространственных возможностей,Проверка пространственных возможностей

Пространственные возможности могут меняться по мере того, как пользователи взаимодействуют с вашим приложением или системой, или даже могут быть изменены самим вашим приложением — например, при перемещении в «Домашнее пространство» или «Полное пространство». Чтобы избежать проблем, вашему приложению необходимо проверить пространственные возможности, чтобы определить, какие API поддерживаются в текущей среде.

Проверьте пространственные возможности с помощью Jetpack Compose для XR.

Jetpack Compose для XR создает локальную композицию для проверки пространственных возможностей. Используйте это, чтобы проверить, включен ли пространственный интерфейс, пространственный звук, среды, сквозная передача или 3D-контент.

Вы можете использовать LocalSpatialCapabilities.current , чтобы проверить, доступны ли в данный момент следующие пространственные возможности:

  • isSpatialUiEnabled : указывает, может ли приложение создавать пространственные элементы пользовательского интерфейса (например, SpatialPanel ).
  • isContent3dEnabled : указывает, может ли приложение создавать 3D-объекты.
  • isAppEnvironmentEnabled : указывает, может ли приложение устанавливать среду.
  • isPassthroughControlEnabled : указывает, может ли приложение контролировать состояние транзитной передачи.
  • isSpatialAudioEnabled : указывает, может ли приложение использовать пространственный звук.

В следующем примере показано, как проверить, включен ли пространственный пользовательский интерфейс.

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(...)
      }
   }
});

См. также