قبل البدء في إنشاء التطبيقات باستخدام إضافات OpenXR المتوافقة أو محرّك متوافق، راجِع إعدادات البيان ومتطلبات الأذونات في الأقسام التالية للتأكّد من ضبط تطبيقك لتطوير الواقع الممتد.
ضبط ملف البيان الخاص بتطبيقك
كما هو الحال مع مشاريع تطبيقات Android الأخرى، يجب أن يتضمّن تطبيق Android XR ملف AndroidManifest.xml يتضمّن إعدادات بيان محدّدة. يصف ملف البيان المعلومات الأساسية عن تطبيقك لأدوات إصدار Android ونظام التشغيل Android وGoogle Play. لمزيد من المعلومات، يُرجى الاطّلاع على دليل نظرة عامة على بيان التطبيق.
بالنسبة إلى التطبيقات المميّزة في الواقع الممتد، يجب أن يحتوي ملف البيان على العناصر والسمات التالية:
سمة PROPERTY_XR_ACTIVITY_START_MODE
تتيح السمة android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" للنظام معرفة أنّه يجب تشغيل نشاط في وضع معيّن عند بدء النشاط.
تحتوي هذه السمة على القيم التالية:
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(OpenXR فقط)
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
يتم تشغيل التطبيقات التي تم إنشاؤها باستخدام OpenXR في "المساحة الكاملة"، ويجب أن تستخدم وضع البدء XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. تشير "المساحة الكاملة غير المُدارة" إلى Android XR بأنّ التطبيق يستخدم OpenXR.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
</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>
خصائص الحاوية المكانية
إذا كان تطبيقك يستخدم الإضافة XR_EXT_spatial_container (التي تم تقديمها في المستوى 4 من واجهة برمجة التطبيقات Spatial API) لعرض المحتوى في وحدات تخزين ثلاثية الأبعاد محدودة أو لوحات ثنائية الأبعاد بالإضافة إلى طرق العرض الشاملة، يمكنك الإعلان عن سمات البيان التالية على مستوى <activity> أو <application> لتقديم تلميحات حول التشغيل إلى وقت التشغيل:
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES: يحدّد أوضاع الحدود التي يستخدمها النشاط، مفصولة بـ|.القيم الصالحة هي:
"2d_panel""bounded""immersive"
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE: تحدّد هذه السمة وضع الحدود الأولية للنشاط عند تشغيله.القيم الصالحة هي:
XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDEDXR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_IMMERSIVEXR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED
<manifest ... >
<application ... >
<activity
android:name="com.example.myapp.MainActivity" ... >
<property
android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES"
android:value="bounded|immersive" />
<property
android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE"
android:value="XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDED" />
</activity>
</application>
</manifest>
<يستخدم المكتبة الأصلية> OpenXR
يجب أن تصرّح تطبيقات OpenXR باستخدام مكتبة OpenXR الأصلية لتحميل وقت التشغيل بنجاح. بدون هذا الإعلان، يتعذّر تحميل وقت التشغيل.
<manifest ... >
<application ... >
<uses-native-library android:name="libopenxr.google.so" android:required="false" />
<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>
ميزات PackageManager لتطبيقات الواقع الممتد
عند
توزيع التطبيقات من خلال "متجر Google Play"،
يمكنك تحديد ميزات الأجهزة أو البرامج المطلوبة في بيان التطبيق. يسمح عنصر uses-feature لـ "متجر Google Play" بفلترة التطبيقات التي تظهر للمستخدمين بشكل مناسب.
تتوفّر الميزات التالية في التطبيقات المميّزة للواقع الممتد.
android.software.xr.api.openxr
يجب أن تتضمّن التطبيقات التي تستهدف نظام التشغيل Android XR والتي تم إنشاؤها باستخدام OpenXR أو Unity هذه الميزة في بيان التطبيق مع ضبط السمة android:required على true.
بالنسبة إلى التطبيقات التي تستخدم حزمة Android XR Extensions for Unity بالإصدار 1.0.0 أو إصدار أحدث أو حزمة Unity OpenXR: Android XR بالإصدار 0.5.0-exp.1 أو إصدار أحدث، ليس من الضروري إضافة هذا العنصر يدويًا إلى ملف بيان التطبيق. ستُدخل هاتان الحزمتان هذا العنصر في بيان التطبيق نيابةً عنك.
قد تحدّد الأجهزة إصدارًا لهذه الميزة، وهو يشير إلى أعلى إصدار من OpenXR يتوافق مع الجهاز. وتمثّل وحدات البت الـ 16 الأعلى الرقم الرئيسي، بينما تمثّل وحدات البت الـ 16 الأدنى الرقم الثانوي. على سبيل المثال، لتحديد الإصدار 1.1 من OpenXR، يتم ضبط القيمة على "0x00010001".
يمكن للتطبيقات استخدام إصدار الميزة للإشارة إلى الحدّ الأدنى من إصدار OpenXR الذي يتطلّبه التطبيق. على سبيل المثال، إذا كان تطبيقك يتطلّب الإصدار 1.1 من OpenXR، يجب الإعلان عن الميزة التالية:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.software.xr.api.spatial
يمكن لتطبيقات OpenXR التي تتطلّب إضافات تم تقديمها في إصدار معيّن من واجهة برمجة التطبيقات Spatial API في Android XR الإعلان عن ميزة android.software.xr.api.spatial مع ضبط android:version على الحدّ الأدنى المطلوب لمستوى واجهة برمجة التطبيقات Spatial API (مثل "1" أو "2" أو "3" أو "4"). يُرجى الاطّلاع على إنشاء تطبيقات باستخدام إضافات OpenXR المتوافقة للتحقّق من إصدار واجهة برمجة التطبيقات Spatial API المطلوب لكل إضافة.
<!-- Indicates that the app requires Android XR Spatial API Level 4 or higher. -->
<uses-feature android:name="android.software.xr.api.spatial"
android:version="4"
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" />
android.hardware.location.gps
تشير هذه العلامة إلى أنّ التطبيق يستخدم الموقع الجغرافي الدقيق لنظام تحديد المواقع العالمي (GPS) على الجهاز، مثل عند استخدام إضافات OpenXR الجغرافية المكانية (XR_ANDROID_geospatial وXR_ANDROID_geospatial_anchor). اضبط android:required على true إذا كان تطبيقك لا يعمل بدون أجهزة GPS، أو false إذا كان بإمكانه العمل بدونها.
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
التعرّف على أذونات OpenXR
تصل العديد من إضافات OpenXR إلى بيانات أجهزة الاستشعار والإمكانات التي تتعلّق بالخصوصية. لاستخدام هذه الإضافات، يجب أن يصرّح تطبيقك عن عناصر <uses-permission> المطلوبة في ملف AndroidManifest.xml وأن يطلب الحصول على الأذونات الخطيرة في وقت التشغيل قبل استدعاء دوال OpenXR المقابلة.
<manifest ... >
<!-- Example dangerous permissions required by specific OpenXR extensions -->
<uses-permission android:name="android.permission.SCENE_UNDERSTANDING_COARSE" />
<uses-permission android:name="android.permission.HAND_TRACKING" />
...
</manifest>
يلخّص الجدول التالي أذونات Android الخطيرة التي تتطلّبها إضافات OpenXR المتوافقة على Android XR. للحصول على تفاصيل كاملة حول أذونات الواقع الممتد في جميع حِزم تطوير البرامج (SDK)، يُرجى الاطّلاع على مقالة فهم أذونات الواقع الممتد.
الإذن |
الإمكانات |
إضافات OpenXR |
|---|---|---|
وضعية العين وحالتها واتجاهها بدقة منخفضة (مثل الصور الرمزية) |
|
|
تتبُّع نظرات العين بدقة عالية لتحديد العناصر وإدخالها والتفاعل معها، بالإضافة إلى تقنية foveated rendering التي تعتمد على تتبُّع نظرات العين. |
|
|
تتبُّع أشكال مزج الوجه وعرض تعابير الوجه |
||
يشير ذلك إلى الإدخال الصوتي لمصادر بيانات تتبُّع تعابير الوجه المستندة إلى الصوت. |
||
تتبُّع أوضاع مفاصل اليد وسرعاتها وحالة التصويب وتمثيل شبكة اليد |
||
تتبُّع وضعيات مفاصل الجسم ونِسب الهيكل العظمي |
||
تتبُّع الطائرات، وتتبُّع العناصر، وتتبُّع الصور/العلامات/رموز الاستجابة السريعة، والمثبّتات، والثبات، وتتبُّع الأشعة مقابل العناصر القابلة للتتبُّع، وتقدير الإضاءة، وشبكات العبور. |
|
|
ميزات "تركيبات العمق" و"تداخل المشاهد" و"تقدير الإضاءة في الخريطة المكعبة" و"تتبُّع الأشعة في العمق" و"التعليقات التوضيحية المكانية". |
||
الموقع الجغرافي والاتجاه الدقيقان بالنسبة إلى الأرض لتتبُّع المواقع الجغرافية والمثبّتات |
الخطوات التالية
بعد الانتهاء من ضبط ملف البيان الخاص بتطبيقك ومراجعة المعلومات المهمة، يمكنك استكشاف طرق إنشاء التطبيقات باستخدام OpenXR: