پساز نصب و پیکربندی 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)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED(فقط کیت توسعه نرمافزار Jetpack XR)
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>
ویژگی PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
ویژگی 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
این ویژگی نشان میدهد که برنامه برای عملکرد صحیح به ورودی از کنترلکننده حرکتی 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.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.level.full
اتصالپذیری
android.hardware.ipsec_tunnel_migration
پیکربندی دستگاه
پیکربندی ضریب شکل
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
ورودی
android.software.input_methods
مکان
ارتباط حوزه نزدیک
پیکربندی و سختافزار امنیتی
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
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.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
پیکربندی نرمافزار
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
تلفن
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.hardware.vr.headtracking
android.hardware.vr.high_performance
ابزارهها
مراحل بعدی
اکنون که پیکربندی مانیفست برنامهتان و مرور اطلاعات مهم را بهپایان رساندهاید، روشهایی را که میتوانید تجربههای فراگیر بسازید کاوش کنید:
- تبدیل کردن برنامه Android به سهبعدی با XR
- توسعه دادن واسط کاربر فضایی با Jetpack Compose ویژه واقعیت گسترده
- پیادهسازی طراحی مواد برای واسط کاربر فضایی
- افزودن محیطهای فضایی به برنامه
- ایجاد، کنترل، و مدیریت نهادها