יכולות המרחב המשותף יכולות להשתנות כאשר המשתמשים יוצרים אינטראקציה עם האפליקציה או עם המערכת, או אפילו על ידי האפליקציה עצמה – לדוגמה, מעבר למרחב הבית או למרחב המלא. כדי למנוע בעיות, האפליקציה צריכה לבדוק את היכולות המרחביות כדי לקבוע אילו ממשקי 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
בסשן כדי לבדוק אילו יכולות מרחבייות זמינות כרגע.
SPATIAL_CAPABILITY_3D_CONTENT
: הפעילות יכולה ליצור תוכן תלת-ממדי.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: הפעילות יכולה להגדיר סביבה משלה.SPATIAL_CAPABILITY_EMBED_ACTIVITY
: הפעילות יכולה להטמיע פעילות אחרת מבחינה מרחבית.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: הפעילות יכולה להפעיל או להשבית את העברת הנתונים.SPATIAL_CAPABILITY_SPATIAL_AUDIO
: אפשר להשתמש באודיו מרחבי בפעילות.SPATIAL_CAPABILITY_UI
: הפעילות יכולה להפוך למרחבית, למשל על ידי הוספת חלונית מרחבית.
אפשר גם להירשם לקבלת שיחה חוזרת, 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(...)
}
}
});