Sprawdzanie możliwości dźwięku przestrzennego

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

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.

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ż