איך מתחילים ליצור חוויות סוחפות

מכשירי XR רלוונטיים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים האלה.
משקפי XR
משקפי AR חוטיים

אחרי ההתקנה וההגדרה של Android Studio, יצירת פרויקט וההגדרה של Jetpack XR SDK, אפשר להתחיל ליצור חוויות אימרסיביות.

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

הגדרת קובץ המניפסט של האפליקציה

כמו בפרויקטים אחרים של אפליקציות ל-Android, גם לאפליקציית Android XR צריך להיות קובץ AndroidManifest.xml עם הגדרות מניפסט ספציפיות. קובץ המניפסט מתאר מידע חיוני על האפליקציה שלכם לכלי הבנייה של Android, למערכת ההפעלה Android ול-Google Play. מידע נוסף זמין במדריך בנושא סקירה כללית של מניפסט האפליקציה.

באפליקציות עם תכונות ייחודיות ל-XR, קובץ המניפסט צריך לכלול את הרכיבים והמאפיינים הבאים:

המאפיין PROPERTY_XR_ACTIVITY_START_MODE

המאפיין android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" מאפשר למערכת לדעת שצריך להפעיל פעילות במצב מסוים כשהפעילות מתחילה.

המאפיין הזה יכול לקבל את הערכים הבאים:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (Jetpack XR SDK בלבד)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (Jetpack XR SDK בלבד)

XR_ACTIVITY_START_MODE_HOME_SPACE

משתמשים במצב ההתחלה הזה כדי להפעיל את האפליקציה ב'מרחב הבית'. במרחב הבית, אפשר להפעיל כמה אפליקציות זו לצד זו, כך שהמשתמשים יכולים לבצע כמה משימות בו-זמנית. כל אפליקציית Android לנייד או למסך גדול יכולה לפעול במרחב הבית, וגם אפליקציות XR שנבנו באמצעות Jetpack XR SDK.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED

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


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

המאפיין android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" מציין שהאפליקציה צריכה להיות מופעלת עם סוג מסוים של גבול. באפליקציה צריך לציין את הערך XR_BOUNDARY_TYPE_LARGE אם היא מיועדת לאפשר למשתמשים לנוע במרחב הפיזי שלהם. אם מציינים XR_BOUNDARY_TYPE_NO_RECOMMENDATION, המערכת לא תציע המלצות לגבי סוג גבולות הבטיחות, ולכן היא תשתמש בסוג שכבר נמצא בשימוש.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

תכונות של PackageManager לאפליקציות XR

כשמפיצים אפליקציות דרך חנות Google Play, אפשר לציין במניפסט של האפליקציה תכונות חומרה או תוכנה שנדרשות להפעלה שלה. האלמנט uses-feature מאפשר לחנות Play לסנן בצורה מתאימה את האפליקציות שמוצגות למשתמשים.

התכונות הבאות ספציפיות לאפליקציות עם הבדלים בין פלטפורמות XR.

android.software.xr.api.spatial

אפליקציות שמבוססות על Jetpack XR SDK חייבות לכלול את התכונה הזו במניפסט האפליקציה. הערך שאתם מגדירים למאפיין android:required תלוי במסלול ההפצה של האפליקציה.

אם חבילות ה-App Bundle שלכם כוללות תכונות או תוכן שמותאמים ל-XR ב-APK קיים לנייד והן מתפרסמות במסלול ההפצה לנייד, צריך להגדיר את המאפיין android:required לערך false:

<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />

אם האפליקציה שלכם מיועדת במיוחד למכשירים עם תמיכה ב-XR והיא מתפרסמת בערוץ הפרסום הייעודי של Android XR, צריך להגדיר את מאפיין android:required לערך true:

<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />

android.hardware.xr.input.controller

התכונה הזו מציינת שהאפליקציה דורשת קלט מבקר תנועה בעל דיוק גבוה עם 6 דרגות חופש (6DoF) כדי לפעול בצורה תקינה. אם האפליקציה תומכת בבקרי משחק ולא יכולה לפעול בלעדיהם, צריך להגדיר את הערך true. אם האפליקציה תומכת בבקרי משחק אבל אפשר להשתמש בה גם בלי בקרים, צריך להגדיר אותה לfalse.

<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

‫android.hardware.xr.input.hand_tracking

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

<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

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

<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

שיקולים לגבי תאימות של מניפסט האפליקציה לאפליקציות לנייד ולאפליקציות למסך גדול

כמו שמתואר בקטע תכונות של PackageManager לאפליקציות XR, אפליקציות מצהירות על שימוש בתכונה מסוימת על ידי הצהרה עליה ברכיב <uses-feature> בקובץ המניפסט של האפליקציה. יכול להיות שחלק מהתכונות, כמו טלפוניה או GPS, לא יהיו תואמות לכל המכשירים.

כדי לראות רשימה של התכונות שמופעלות במכשיר, מריצים את הפקודה adb shell pm list features.

תכונות שאינן נתמכות

מסנני חנות Google Play מסננים את האפליקציות שזמינות להתקנה במכשיר באמצעות ההצהרות הבאות של תכונות Android.

חומרה של מצלמה

android.hardware.camera.ar

android.hardware.camera.autofocus

android.hardware.camera.capability.manual_post_processing

android.hardware.camera.capability.manual_sensor

android.hardware.camera.capability.raw

android.hardware.camera.concurrent

android.hardware.camera.external

android.hardware.camera.flash

android.hardware.camera.level.full

קישוריות

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

תצורת המכשיר

android.hardware.ram.low

הגדרת גורם צורה

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

קלט

android.hardware.consumerir

android.software.input_methods

מיקום

android.hardware.location.gps

תקשורת מטווח קצר

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

תצורת אבטחה וחומרה

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

android.hardware.identity_credential

android.hardware.identity_credential_direct_access

android.hardware.keystore.limited_use_key

android.hardware.keystore.single_use_key

android.hardware.strongbox_keystore

חיישנים

android.hardware.sensor.accelerometer_limited_axes

android.hardware.sensor.accelerometer_limited_axes_uncalibrated

android.hardware.sensor.ambient_temperature

android.hardware.sensor.barometer

android.hardware.sensor.gyroscope_limited_axes

android.hardware.sensor.gyroscope_limited_axes_uncalibrated

android.hardware.sensor.heading

android.hardware.sensor.heartrate

android.hardware.sensor.heartrate.ecg

android.hardware.sensor.hinge_angle

android.hardware.sensor.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

הגדרת תוכנה

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

טלפוניה

android.hardware.telephony

android.hardware.telephony.calling

android.hardware.telephony.cdma

android.hardware.telephony.data

android.hardware.telephony.euicc

android.hardware.telephony.euicc.mep

android.hardware.telephony.gsm

android.hardware.telephony.ims

android.hardware.telephony.mbms

android.hardware.telephony.messaging

android.hardware.telephony.radio.access

android.hardware.telephony.subscription

android.software.sip

android.software.sip.voip

מציאות מדומה (גרסה קודמת)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

ווידג'טים

android.software.app_widgets

השלבים הבאים

אחרי שסיימתם להגדיר את המניפסט של האפליקציה ולבדוק מידע חשוב, הגיע הזמן לבדוק איך אפשר ליצור חוויות סוחפות: