Możliwości przestrzenne mogą się zmieniać w zależności od tego, jak użytkownicy będą korzystać z aplikacji lub systemu, a nawet mogą być zmieniane przez samą aplikację – na przykład przez przejście do pokoju domowego lub pełnego pokoju. Aby uniknąć problemów, aplikacja musi sprawdzić, czy urządzenie obsługuje funkcje przestrzenne, aby określić, które interfejsy API są obsługiwane w bieżącym środowisku.
Sprawdzanie obsługi funkcji przestrzennych za pomocą Jetpack Compose for XR
Jetpack Compose dla XR tworzy Composition Local w celu sprawdzenia możliwości przestrzennych. Użyj tej opcji, aby sprawdzić, czy włączone są interfejs przestrzenny, dźwięk przestrzenny, środowiska, przesyłanie przezroczyste lub treści 3D.
Aby sprawdzić, czy są obecnie dostępne te funkcje przestrzenne: LocalSpatialCapabilities.current
isSpatialUiEnabled
: wskazuje, czy aplikacja może tworzyć elementy UI przestrzennego (na przykładSpatialPanel
).isContent3dEnabled
: określa, czy aplikacja może tworzyć obiekty 3D.isAppEnvironmentEnabled
: wskazuje, czy aplikacja może ustawić środowisko.isPassthroughControlEnabled
: wskazuje, czy aplikacja może kontrolować stan przepuszczania.isSpatialAudioEnabled
: wskazuje, czy aplikacja może korzystać z dźwięku przestrzennego.
Ten przykład pokazuje, jak sprawdzić, czy interfejs przestrzenny jest włączony.
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
Subspace {
SpatialPanel(
modifier = SubspaceModifier
.width(1488.dp)
.fillMaxHeight()
) {
AppContent()
}
}
} else {
AppContent()
}
Sprawdzanie możliwości przestrzennych za pomocą SceneCore
Jeśli używasz biblioteki SceneCore, musisz utworzyć sesję. Po utworzeniu sesji wywołaj ją za pomocą metody getSpatialCapabilities
, aby sprawdzić, które funkcje przestrzenne są obecnie dostępne.
SPATIAL_CAPABILITY_3D_CONTENT
: aktywność może tworzyć treści 3D.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: aktywność może ustawić własne środowisko.SPATIAL_CAPABILITY_EMBED_ACTIVITY
: aktywność może zawierać inną aktywność.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: aktywność może włączać lub wyłączać przekierowanie.SPATIAL_CAPABILITY_SPATIAL_AUDIO
: aktywność może używać dźwięku przestrzennego.SPATIAL_CAPABILITY_UI
: aktywność może być przestrzenna, np. dodając panel przestrzenny.
Możesz też subskrybować usługę połączenia zwrotnego addSpatialCapabilitiesChangedListener
, która powiadomi Cię, gdy funkcje przestrzenne ulegną zmianie.
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(...)
}
}
});
Zobacz również
- Tworzenie sesji
- Przejście z HSM na FSM
- Dodawanie środowisk przestrzennych do aplikacji
- Dodawanie modeli 3D do aplikacji