Verificare le funzionalità spaziali

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:

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.

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