Verificar os recursos espaciais

Dispositivos XR aplicáveis
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos de XR.
Headsets de realidade estendida
Óculos XR com fio

Os recursos espaciais podem variar entre dispositivos e mudar conforme os usuários interagem com seu app ou o sistema. Eles podem até ser mudados pelo próprio app, por exemplo, ao passar para o Modo de Espaço Compacto ou Ampliado. Para evitar problemas, o app precisa verificar as funcionalidades espaciais para determinar quais APIs são compatíveis com o ambiente atual.

Verificar recursos espaciais usando o Jetpack Compose para XR

O Jetpack Compose para XR cria um Composition Local para verificar recursos espaciais. Use isso para verificar se a interface espacial, o áudio espacial, os ambientes, o modo ambiente ou o conteúdo 3D estão ativados.

Use LocalSpatialCapabilities.current para verificar se os seguintes recursos espaciais estão disponíveis:

O exemplo a seguir mostra como verificar se a interface espacial está ativada:

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

Verificar recursos espaciais usando o SceneCore

Ao usar a biblioteca SceneCore, é necessário criar uma sessão. Depois que a sessão for criada, use spatialCapabilities do scene da sessão para consultar quais recursos espaciais estão disponíveis no momento.

Você também pode se inscrever em um callback, addSpatialCapabilitiesChangedListener, que notifica quando as capacidades espaciais mudam.

// 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)
) {
    // ...
}

Usar o modo de fusão para verificar os recursos de exibição do dispositivo

No Android XR, os headsets e óculos XR com fio têm diferentes recursos de hardware, principalmente em relação ao tipo de tela. Talvez seja necessário adaptar as cores da interface do app e dos objetos renderizados para maximizar a visibilidade, que pode ser influenciada pelo tipo de tela e pelo modo de combinação preferido usado pelo dispositivo. A API DisplayBlendMode oferece a capacidade de modo de combinação do dispositivo para renderização. Use essa API para determinar como o conteúdo virtual é adicionado ao mundo real.

Confira alguns tipos de modo de fusão:

  • ADDITIVE: o conteúdo virtual é adicionado ao mundo real com a inclusão dos valores de pixel para cada um dos componentes vermelho, verde e azul. O alfa é ignorado, e os pixels pretos aparecem transparentes.
  • ALPHA_BLEND: o conteúdo virtual é adicionado ao mundo real combinando os valores de pixel com base no componente Alfa.
  • NO_DISPLAY: a fusão não é compatível com o dispositivo.

Use XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() da biblioteca Jetpack XR Runtime para verificar qual tipo de modo de combinação está sendo usado e faça ajustes conforme necessário.

Veja também