Le funzionalità spaziali possono cambiare man mano che gli utenti interagiscono con la tua app o con il sistema oppure possono essere modificate anche dalla tua app stessa, ad esempio passando allo spazio Casa o allo spazio Completo. Per evitare problemi, l'app deve verificare la presenza di funzionalità spaziali per determinare quali API sono supportate nell'ambiente corrente.
Verificare la presenza di funzionalità spaziali utilizzando Jetpack Compose per XR
Jetpack Compose per XR crea un Composition Local per verificare le funzionalità spaziali. Utilizzalo per verificare se l'interfaccia utente spaziale, l'audio spaziale, gli ambienti, il passthrough o i contenuti 3D sono attivati.
Puoi utilizzare LocalSpatialCapabilities.current
per verificare se
le seguenti funzionalità spaziali sono attualmente disponibili:
isSpatialUiEnabled
: indica se l'applicazione può creare elementi di interfaccia utente spaziali (ad esempioSpatialPanel
).isContent3dEnabled
: indica se l'applicazione può creare oggetti 3D.isAppEnvironmentEnabled
: indica se l'applicazione può impostare l'ambiente.isPassthroughControlEnabled
: indica se l'applicazione può controllare lo stato di trasmissione.isSpatialAudioEnabled
: indica se l'applicazione può utilizzare l'audio spaziale.
L'esempio seguente mostra come verificare se l'interfaccia utente spaziale è attivata.
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
Subspace {
SpatialPanel(
modifier = SubspaceModifier
.width(1488.dp)
.fillMaxHeight()
) {
AppContent()
}
}
} else {
AppContent()
}
Verificare la presenza di funzionalità spaziali utilizzando SceneCore
Quando utilizzi la libreria SceneCore, devi creare una
sessione. Una volta creata la sessione, chiama
getSpatialCapabilities
sulla sessione per eseguire una query sulle funzionalità
spaziali attualmente disponibili.
SPATIAL_CAPABILITY_3D_CONTENT
: l'attività può creare contenuti 3D.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: l'attività può impostare il proprio ambiente.SPATIAL_CAPABILITY_EMBED_ACTIVITY
: l'attività può incorporare spazialmente un'altra attività.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: l'attività può attivare o disattivare il passthrough.SPATIAL_CAPABILITY_SPATIAL_AUDIO
: l'attività può utilizzare l'audio spaziale.SPATIAL_CAPABILITY_UI
: l'attività può essere spazializzata, ad esempio aggiungendo un riquadro spaziale.
Puoi anche scegliere di iscriverti a un callout, addSpatialCapabilitiesChangedListener
che ti invia una notifica quando le funzionalità di spazialità sono cambiate.
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(...)
}
}
});
Vedi anche
- Create a session (Crea una sessione)
- Transizione tra HSM e FSM
- Aggiungere ambienti spaziali all'app
- Aggiungere modelli 3D all'app