Możliwości przestrzenne mogą się różnić w zależności od urządzenia i zmieniać się, gdy użytkownicy korzystają z aplikacji lub systemu. Może je nawet zmienić sama aplikacja, np. przechodząc do przestrzeni domowej lub pełnej przestrzeni. Aby uniknąć problemów, aplikacja musi sprawdzić możliwości przestrzenne, aby określić, które interfejsy API są obsługiwane w bieżącym środowisku.
Sprawdzanie funkcji przestrzennych za pomocą Jetpack Compose for XR
Jetpack Compose for XR tworzy Composition Local do sprawdzania możliwości przestrzennych. Użyj tej opcji, aby sprawdzić, czy włączony jest interfejs przestrzenny, dźwięk przestrzenny, środowiska, tryb passthrough lub treści 3D.
Możesz użyć LocalSpatialCapabilities.current, aby sprawdzić, czy te funkcje przestrzenne są obecnie dostępne:
isSpatialUiEnabled: wskazuje, czy aplikacja może tworzyć elementy interfejsu przestrzennego (np.SpatialPanel).isContent3dEnabled: wskazuje, czy aplikacja może tworzyć obiekty 3D.isAppEnvironmentEnabled: wskazuje, czy aplikacja może ustawić środowisko.isPassthroughControlEnabled: wskazuje, czy aplikacja może kontrolować stan przekazywania.isSpatialAudioEnabled: wskazuje, czy aplikacja może używać dźwięku przestrzennego.
Poniższy 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
Podczas korzystania z biblioteki SceneCore musisz utworzyć sesję. Po utworzeniu sesji użyj spatialCapabilities z scene sesji, aby sprawdzić, które funkcje przestrzenne są obecnie dostępne.
SPATIAL_3D_CONTENT: aktywność może tworzyć treści 3D.APP_ENVIRONMENT: aktywność może ustawić własne środowisko.EMBED_ACTIVITY: aktywność może przestrzennie osadzać inną aktywność.PASSTHROUGH_CONTROL: aktywność może włączać lub wyłączać przekazywanie.SPATIAL_AUDIO: aktywność może korzystać z dźwięku przestrzennego.SPATIAL_UI: aktywność może sama się przestrzennie rozszerzyć (np. przez dodanie panelu przestrzennego).
Możesz też zasubskrybować wywołanie zwrotne addSpatialCapabilitiesChangedListener, które powiadomi Cię o zmianie możliwości przestrzennych.
// 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) ) { // ... }
Używanie trybu mieszania do sprawdzania możliwości wyświetlania urządzenia
Na Androidzie XR gogle XR i przewodowe okulary XR mają różne możliwości sprzętowe, zwłaszcza w zakresie typu wyświetlacza. Może być konieczne dostosowanie kolorów interfejsu aplikacji i renderowanych obiektów, aby zmaksymalizować widoczność, na którą może wpływać typ wyświetlacza i preferowany tryb mieszania używany przez urządzenie. Interfejs API DisplayBlendMode udostępnia funkcję trybu mieszania urządzenia na potrzeby renderowania. Użyj tego interfejsu API, aby określić, jak treści wirtualne są dodawane do świata rzeczywistego.
Oto kilka typów trybów mieszania, o których warto wiedzieć:
ADDITIVE: treści wirtualne są dodawane do świata rzeczywistego przez dodanie wartości pikseli dla każdego z komponentów czerwonego, zielonego i niebieskiego. Kanał alfa jest ignorowany, a czarne piksele są przezroczyste.ALPHA_BLEND: treści wirtualne są dodawane do świata rzeczywistego przez mieszanie alfa wartości pikseli na podstawie komponentu alfa.NO_DISPLAY: mieszanie nie jest obsługiwane na urządzeniu.
Użyj XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() z biblioteki środowiska wykonawczego Jetpack XR, aby sprawdzić, jaki typ trybu mieszania jest używany, i wprowadzić odpowiednie zmiany.
Zobacz też
- Tworzenie sesji
- Przejście między HSM i FSM
- Dodawanie środowisk przestrzennych do aplikacji
- Dodawanie modeli 3D do aplikacji