Пространственные возможности могут различаться на разных устройствах и меняться по мере взаимодействия пользователей с вашим приложением или системой. Они могут быть изменены даже самим приложением, например, при переходе в Home Space или Full Space. Во избежание проблем ваше приложение должно проверять пространственные возможности, чтобы определить, какие 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 вам потребуется создать сеанс . После этого используйте spatialCapabilities из scene сеанса, чтобы узнать, какие пространственные возможности доступны в данный момент.
-
SPATIAL_3D_CONTENT: Действие может создавать 3D-контент. -
APP_ENVIRONMENT: Действие может устанавливать свою собственную среду. -
EMBED_ACTIVITY: Действие может пространственно встраиваться в другое действие. -
PASSTHROUGH_CONTROL: Действие может включать или отключать сквозной доступ. -
SPATIAL_AUDIO: Действие может использовать пространственный звук. -
SPATIAL_UI: Действие может пространственно себя позиционировать (например, добавляя пространственную панель).
Вы также можете подписаться на обратный вызов addSpatialCapabilitiesChangedListener , который уведомит вас об изменении пространственных возможностей.
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
Используйте режим смешивания для проверки возможностей отображения устройства.
На Android XR гарнитуры XR и проводные очки XR имеют различные аппаратные возможности, особенно в отношении типа дисплея. Вам может потребоваться адаптировать цвета пользовательского интерфейса приложения и отображаемых объектов для максимальной видимости, что может зависеть от типа дисплея и предпочитаемого режима смешивания, используемого устройством. API DisplayBlendMode предоставляет возможности режима смешивания устройства для рендеринга. Используйте этот API, чтобы определить, как виртуальный контент добавляется в реальный мир.
Вот некоторые типы режимов наложения, о которых следует знать:
-
ADDITIVE: виртуальный контент добавляется к реальному миру путём сложения значений пикселей для каждого из компонентов: красного, зелёного и синего. Альфа-канал игнорируется, а чёрные пиксели выглядят прозрачными. -
ALPHA_BLEND: Виртуальный контент добавляется в реальный мир путем альфа-смешивания значений пикселей на основе компонента Альфа. -
NO_DISPLAY: Смешивание на устройстве не поддерживается.
Используйте XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() из библиотеки Jetpack XR Runtime, чтобы проверить, какой тип режима смешивания используется, и внести необходимые корректировки.
Смотрите также
- Создать сеанс
- Переход между HSM и FSM
- Добавьте пространственные среды в свое приложение
- Добавьте 3D-модели в ваше приложение