Le funzionalità spaziali possono variare a seconda dei dispositivi e cambiare man mano che gli utenti interagiscono con la tua app o il sistema. Possono persino essere modificate dalla tua app stessa, ad esempio passando allo spazio Home o allo spazio intero. Per evitare problemi, la tua app deve verificare le funzionalità spaziali per determinare quali API sono supportate nell'ambiente attuale.
Verificare le funzionalità spaziali utilizzando Jetpack Compose per XR
Jetpack Compose per XR crea un Composition Local per verificare le funzionalità spaziali. Utilizzalo per verificare se sono attivati l'interfaccia utente spaziale, l'audio spaziale, gli ambienti, il passthrough o i contenuti 3D.
Puoi utilizzare LocalSpatialCapabilities.current per verificare se le seguenti
funzionalità spaziali sono attualmente disponibili:
isSpatialUiEnabled: indica se l'applicazione può creare elementi dell'interfaccia utente spaziale (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 passthrough.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 le funzionalità spaziali utilizzando SceneCore
Quando utilizzi la libreria SceneCore, devi creare una sessione. Una volta
creata la sessione, utilizza spatialCapabilities dalla
scene per eseguire una query sulle funzionalità spaziali attualmente disponibili.
SPATIAL_3D_CONTENT: l'attività può creare contenuti 3D.APP_ENVIRONMENT: l'attività può impostare il proprio ambiente.EMBED_ACTIVITY: l'attività può incorporare spazialmente un'altra attività.PASSTHROUGH_CONTROL: l'attività può attivare o disattivare il passthrough.SPATIAL_AUDIO: l'attività può utilizzare l'audio spaziale.SPATIAL_UI: l'attività può spazializzarsi (ad esempio aggiungendo un pannello spaziale).
Puoi anche scegliere di abbonarti a un callback,
addSpatialCapabilitiesChangedListener che ti avvisa quando le funzionalità spaziali
sono cambiate.
// 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) ) { // ... }
Utilizzare la modalità di fusione per verificare le funzionalità di visualizzazione del dispositivo
Su Android XR, i visori XR e gli occhiali XR con cavo hanno funzionalità hardware diverse, in particolare per quanto riguarda il tipo di display. Potresti dover adattare i colori dell'interfaccia utente e degli oggetti sottoposti a rendering della tua app per massimizzare la visibilità, che potrebbe essere influenzata dal tipo di display e dalla modalità di fusione preferita utilizzata dal dispositivo. L'API DisplayBlendMode fornisce la funzionalità della modalità di fusione del dispositivo
per il rendering. Utilizza questa API per determinare come i contenuti virtuali vengono aggiunti al mondo reale.
Ecco alcuni tipi di modalità di fusione da tenere presenti:
ADDITIVE: i contenuti virtuali vengono aggiunti al mondo reale aggiungendo i valori dei pixel per ciascuno dei componenti rosso, verde e blu. Il canale alfa viene ignorato e i pixel neri appaiono trasparenti.ALPHA_BLEND: i contenuti virtuali vengono aggiunti al mondo reale mediante la fusione alfa dei valori dei pixel in base al componente alfa.NO_DISPLAY: la fusione non è supportata sul dispositivo.
Utilizza XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() dalla
libreria Jetpack XR Runtime per verificare il tipo di modalità di fusione in uso
e apportare le modifiche necessarie.
Vedi anche
- Create a session (Crea una sessione)
- Transition between HSM and FSM (Transizione tra HSM e FSM)
- Add spatial environments to your app (Aggiungere ambienti spaziali all'app)
- Add 3D models to your app (Aggiungere modelli 3D all'app)