Пространственные возможности могут меняться по мере того, как пользователи взаимодействуют с вашим приложением или системой, или даже могут быть изменены самим вашим приложением — например, при перемещении в «Домашнее пространство» или «Полное пространство». Чтобы избежать проблем, вашему приложению необходимо проверить пространственные возможности, чтобы определить, какие 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
в сеансе, чтобы узнать, какие пространственные возможности доступны в данный момент.
-
SPATIAL_CAPABILITY_3D_CONTENT
: действие может создавать трехмерное содержимое. -
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(...)
}
}
});
См. также
- Создать сеанс
- Переход между HSM и FSM
- Добавьте пространственную среду в свое приложение
- Добавьте 3D-модели в свое приложение