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

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

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

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

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

כמו בפרויקטים אחרים של אפליקציות ל-Android, לאפליקציה ל-Android XR צריך להיות קובץ AndroidManifest.xml עם הגדרות מניפסט ספציפיות. קובץ המניפסט מתאר מידע חיוני על האפליקציה לכלי ה-build של 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 תלוי במסלול ההפצה של האפליקציה.

אם האפליקציה שלכם כוללת תכונות או תוכן שמיועדים ל-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" />

android.hardware.xr.input.face_tracking

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

<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_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

תקשורת מטווח קצר (NFC)

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

השלבים הבאים

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