היכולות המרחביות עשויות להשתנות בהתאם למכשיר, והן משתנות כשהמשתמשים יוצרים אינטראקציה עם האפליקציה או עם המערכת. יכול להיות שהאפליקציה עצמה תשנה את ההגדרות האלה – למשל, תעבור למצב 'מרחב ביתי' או 'מרחב מלא'. כדי להימנע מבעיות, האפליקציה צריכה לבדוק את היכולות המרחביות כדי לקבוע אילו ממשקי API נתמכים בסביבה הנוכחית.
בדיקת יכולות מרחביות באמצעות Jetpack Compose for XR
Jetpack Compose for XR יוצר Composition Local כדי לבדוק יכולות מרחביות. אפשר להשתמש בזה כדי לבדוק אם ממשק משתמש מרחבי, אודיו מרחבי, סביבות, תכונת ה-Passthrough או תוכן תלת-ממדי מופעלים.
אתם יכולים להשתמש ב-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, צריך ליצור סשן. אחרי שיוצרים את הסשן, משתמשים ב-spatialCapabilities מתוך scene של הסשן כדי לשאול אילו יכולות מרחביות זמינות כרגע.
-
SPATIAL_3D_CONTENT: הפעילות יכולה ליצור תוכן תלת-ממדי. -
APP_ENVIRONMENT: הפעילות יכולה להגדיר סביבה משלה. -
EMBED_ACTIVITY: הפעילות יכולה להטמיע פעילות אחרת במרחב. -
PASSTHROUGH_CONTROL: הפעילות יכולה להפעיל או להשבית העברה. -
SPATIAL_AUDIO: אפשר להשתמש באודיו מרחבי בפעילות. -
SPATIAL_UI: הפעילות יכולה להפוך למרחבית (לדוגמה, הוספת חלונית מרחבית).
אפשר גם להירשם לקבלת קריאה חוזרת (callback), addSpatialCapabilitiesChangedListener שתשלח לכם הודעה כשיכולות מרחביות משתנות.
// 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) ) { // ... }
שימוש במצב מיזוג כדי לבדוק את יכולות התצוגה של המכשיר
ב-Android XR, למשקפי XR ולמשקפי XR עם חוט יש יכולות חומרה שונות, במיוחד בכל הנוגע לסוג המסך. יכול להיות שתצטרכו להתאים את הצבעים של ממשק המשתמש והאובייקטים המעובדים באפליקציה כדי למקסם את הנראות שלהם. הנראות עשויה להיות מושפעת מסוג התצוגה וממצב השילוב המועדף שבו המכשיר משתמש. DisplayBlendMode API מספק את היכולת של מצב השילוב של המכשיר לרינדור. אפשר להשתמש ב-API הזה כדי לקבוע איך תוכן וירטואלי מתווסף לעולם האמיתי.
אלה כמה מסוגי מצבי השילוב שכדאי להכיר:
-
ADDITIVE: תוכן וירטואלי מתווסף לעולם האמיתי על ידי הוספת ערכי הפיקסלים של כל אחד מהרכיבים: אדום, ירוק וכחול. המערכת מתעלמת מהאלפא, והפיקסלים השחורים מופיעים כשקופים. -
ALPHA_BLEND: תוכן וירטואלי מתווסף לעולם האמיתי באמצעות מיזוג אלפא של ערכי הפיקסלים על סמך רכיב האלפא. -
NO_DISPLAY: המכשיר לא תומך במיזוג.
אפשר להשתמש ב-XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() מתוך הספרייה Jetpack XR Runtime כדי לבדוק באיזה סוג של מצב מיזוג נעשה שימוש ולבצע התאמות לפי הצורך.