בדיקת היכולות המרחביות

יכולות המרחב המשותף יכולות להשתנות כאשר המשתמשים יוצרים אינטראקציה עם האפליקציה או עם המערכת, או אפילו על ידי האפליקציה עצמה – לדוגמה, מעבר למרחב הבית או למרחב המלא. כדי למנוע בעיות, האפליקציה צריכה לבדוק את היכולות המרחביות כדי לקבוע אילו ממשקי API נתמכים בסביבה הנוכחית.

בדיקת היכולות המרחביות באמצעות Jetpack Compose for XR

Jetpack Compose for XR יוצר Composition Local כדי לבדוק את היכולות המרחביות. אפשר להשתמש בקוד הזה כדי לבדוק אם ממשק המשתמש המרחבי, האודיו המרחבי, הסביבות, העברת האות או התוכן התלת-ממדי מופעלים.

אפשר להשתמש ב-LocalSpatialCapabilities.current כדי לבדוק אם התכונות המרחביות הבאות זמינות כרגע:

  • isSpatialUiEnabled: מציין אם האפליקציה עשויה ליצור רכיבי ממשק משתמש מרחבי (לדוגמה, SpatialPanel).
  • isContent3dEnabled: מציין אם האפליקציה יכולה ליצור אובייקטים תלת-ממדיים.
  • isAppEnvironmentEnabled: מציין אם האפליקציה יכולה להגדיר את הסביבה.
  • isPassthroughControlEnabled: מציין אם האפליקציה יכולה לשלוט במצב העברה.
  • isSpatialAudioEnabled: מציין אם האפליקציה יכולה להשתמש באודיו מרחבי.

בדוגמה הבאה מוסבר איך לבדוק אם ממשק המשתמש המרחבי מופעל.

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

בדיקת היכולות המרחביות באמצעות SceneCore

כשמשתמשים בספריית SceneCore, צריך ליצור סשן. אחרי שיוצרים את הסשן, קוראים ל-getSpatialCapabilities בסשן כדי לבדוק אילו יכולות מרחבייות זמינות כרגע.

אפשר גם להירשם לקבלת שיחה חוזרת, addSpatialCapabilitiesChangedListener שתודיע לכם כשהיכולות המרחביות ישתנו.

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(...)
      }
   }
});

למידע נוסף