إنشاء دليل سياحي للواقع المختلط باستخدام Android XR وGeospatial API وGemini
يستغرق الاطّلاع على المقال 6 دقائق
في مؤتمر Google I/O لهذا العام، أعلنّا عن طرح تحديث للتجارب المكانية: تتوفّر الآن Geospatial API كمعاينة في ARCore for Jetpack XR. من خلال توفير نظام تحديد المواقع المرئي (VPS) من Google على Android XR، يتيح هذا النظام تثبيت المحتوى الرقمي في العالم المادي بدقة تصل إلى أقل من متر واحد وتحديد الاتجاه بدقة في المناطق المتوافقة.* لاستكشاف الإمكانات التي يمكن أن تتيحها Geospatial API، أنشأ فريقنا عرضًا توضيحيًا: جولة XR Geospatial.
تخيّل أنك تتجوّل في مدينة جديدة، وتضع نظارات بنظام الواقع الممتد سلكية (مثل XREAL Project Aura القادمة)، ويصطحبك على الفور مرشد محلي خبير. لن تحتاج إلى التحديق في خريطة ثنائية الأبعاد، بل سترشدك النماذج الثلاثية الأبعاد بلطف إلى طريقك، وسيخبرك صوت ذكي عن المعالم التاريخية التي تظهر أمامك مباشرةً. لقد جمعنا بين واجهات Geospatial API وGemini API باستخدام Firebase AI Logic وGoogle Maps Grounding وJetpack XR SDK لإنشاء تجربة جولة مشي غامرة بدون استخدام اليدين.
إخلاء المسؤولية: يتم استخدام تطبيقَي "الفيديو" و"دليل الجولات" لأغراض توضيحية فقط. تم اختصار بعض التسلسلات. قد تكون أي أجهزة معروضة قيد التطوير، وقد تختلف تفاصيل المنتج النهائي.
دعونا نلقِ نظرة على تفاصيل التنفيذ ونوضّح كيف ربطنا واجهات برمجة التطبيقات هذه معًا لإنشاء تجربة مكانية على مستوى العالم.
1. تحديد موقع المستخدم بدقة باستخدام ARCore Geospatial API (نظام تحديد المواقع المرئية)
يمكنك تحسين تجربة التنقّل في الواقع الممتد من خلال الجمع بين قوة نظام تحديد المواقع العالمي (GPS) ودقة نظام تحديد المواقع المرئية (VPS). تتيح الدقة والاتجاه الدقيق اللذان يوفّرهما نظام VPS محاذاة نقاط الطريق الثلاثية الأبعاد مع العالم الحقيقي.
لهذا السبب، يمكن أن تساعدك Geospatial API على Android XR في إنشاء تجارب مخصّصة. من خلال استخدام ميزة "رؤية الكمبيوتر" المتقدّمة، تحاول خدمة VPS توفير GeospatialPose (بما في ذلك خطوط الطول والعرض والاتجاه) أكثر دقة من نظام تحديد المواقع العالمي (GPS).
في ما يلي كيفية استرداد وضع المستخدم الجغرافي المكاني من خلال ربط اتجاه الجهاز بإحداثيات جغرافية مكانية:
// Retrieve the current geospatial pose from the ARCore session val result = geospatial.createGeospatialPoseFromPose(arDevice.state.value.devicePose) if (result is CreateGeospatialPoseFromPoseSuccess) { val pose = result.pose Log.d("VPS", "Accurate Location: ${pose.latitude}, ${pose.longitude}") }
وبما أنّ التجربة بأكملها تعتمد على هذه الدقة، نراقب horizontalAccuracy وorientationYawAccuracy إلى أن يستوفيا الحدّ الأدنى المطلوب. إذا كان المستخدم في مكان مغلق أو في منطقة غير معروفة، نطلب منه "الانتقال إلى مساحة عامة في الهواء الطلق والنظر حوله".
2. تصميم خطة الرحلة باستخدام Gemini API و"خرائط Google" كمصدر
بعد الحصول على الموقع الجغرافي، نستخدم Gemini API من خلال Firebase AI Logic لطلب من نموذج Gemini أن يتصرّف كمرشد سياحي محلي. نرسل إحداثيات المستخدم إلى النموذج ونطلب منه عرض استجابة JSON منظَّمة تحتوي على جولات مشي قريبة:
val configForTools = ToolConfig( functionCallingConfig = null, retrievalConfig = retrievalConfig { latLng = FirebaseLatLng(pose.latitude, pose.longitude) languageCode = "en" } ) val responseJsonSchema = Schema.obj( mapOf( "locationIntro" to Schema.string(), "tours" to Schema.array( Schema.obj( mapOf( "title" to Schema.string(), "description" to Schema.string(), "stops" to Schema.array( Schema.obj( mapOf( "name" to Schema.string(), "detailedName" to Schema.string(), "description" to Schema.string() ) ) ) ) ) ) ) ) val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel( modelName = "gemini-3.5-flash", tools = listOf(Tool.googleMaps()), generationConfig = generationConfig { responseMimeType = "application/json" responseSchema = responseJsonSchema } ) val result = model.generateContent("The user is at latitude ${pose.latitude} and longitude ${pose.longitude}. Generate exactly 3 diverse tours near this location (e.g., historical, food, nature). All tour ideas should be walking distance only.")
تتميّز النماذج اللغوية الكبيرة بقدرتها الرائعة على إنشاء أوصاف غنية، ولكنّها قد تهلوس أحيانًا بشأن إحداثيات خطوط العرض/الطول الدقيقة. لحلّ هذه المشكلة، استخدمنا Google Maps Grounding لتحديد موقع الذكاء الاصطناعي.
3- صوت يرشدك: ميزة تحويل النص إلى كلام في Gemini 2.5
لجعل دليل الجولة يبدو وكأنّه موجود فعلاً، نفّذنا تعليقات صوتية ديناميكية.
باستخدام gemini-2.5-flash-tts model، يمكننا ضبط إعدادات إنشاء النموذج لعرض بيانات صوتية بدلاً من النصوص فقط. إليك كيفية طلب ResponseModality.AUDIO:
val ttsModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-2.5-flash-tts", generationConfig = generationConfig { // Instruct the model to return Audio responseModalities = listOf(ResponseModality.AUDIO) } ) val response = ttsModel.generateContent("Say in a neutral but positive voice:\n$prompt") // Extract the raw audio bytes from the response val audioBytes = response.candidates.firstOrNull()?.content?.parts ?.filterIsInstance<InlineDataPart>() ?.firstOrNull { it.mimeType.contains("audio") }?.inlineData
4. تحويل الأفكار إلى واقع ثلاثي الأبعاد باستخدام Jetpack XR
الجزء الأخير من اللغز هو عرض هذه البيانات في مجال رؤية المستخدم. تسهّل حزمة تطوير البرامج (SDK) لمنصة Jetpack XR عملية الانتقال من واجهة مستخدم ثنائية الأبعاد على Android إلى الحوسبة المكانية.
استخدمنا Jetpack Compose للواقع الممتد (XR) لإنشاء مكوّنات مكانية. لتمثيل نقاط الاهتمام على طول الجولة، أنشأنا عنصر Composable باسم InfoSphere، يحتوي على GltfModel لكرات ثلاثية الأبعاد تطفو في الفضاء ويمكن التفاعل معها للكشف عن المعلومات.
باستخدام حزمة تطوير البرامج (SDK) الخاصة بـ Jetpack XR، يمكننا وضع نماذج ثلاثية الأبعاد بجانب واجهة مستخدم Compose باستخدام SpatialBox وSceneCoreEntity. استخدمنا أيضًا InteractableComponent للردّ على نقرات المستخدمين.
من خلال الجمع بين AnimatedSpatialVisibility لأسطح واجهة مستخدم Compose التقليدية وعناصر SceneCoreEntity الثلاثية الأبعاد، يمكننا دمج البيانات بسلاسة في العالم المادي.
@Composable fun InfoSphere( content: InfoBubbleContent, session: Session, sphereModel: GltfModel, isSelected: Boolean, onClick: () -> Unit ) { // SpatialBox lets us arrange 3D components and SpatialPanels together SpatialBox( SubspaceModifier .offset(x = 2.dp, y = 1.dp, z = (-3).dp) // Positioned in 3D space ) { // Smoothly animate the visibility of our 2D Compose UI Panel AnimatedSpatialVisibility(visible = isSelected) { SpatialPanel { InfoBubble(content) // Regular 2D Compose UI } } // Render our interactive 3D sphere SceneCoreEntity( factory = { GltfModelEntity.create(session, sphereModel).also { entity -> // Make the 3D model respond to user taps entity.addComponent(InteractableComponent.create(session) { inputEvent -> if (inputEvent.action == InputEvent.Action.UP) { onClick() } }) } } ) } }
استكشِف إمكانات Android XR اليوم
أظهر لنا إنشاء تطبيق XR Geospatial Tour أنّ عائق الدخول إلى التجارب المكانية على مستوى العالم أقل من أي وقت مضى بالنسبة إلى مطوّري تطبيقات Android. بما أنّ Geospatial API متاحة الآن في إصدار تجريبي على Android XR، يمكن لتطبيقاتك فهم العالم المادي من حولها بسلاسة. من خلال الجمع بين واجهات برمجة التطبيقات في Compose for XR وبيانات الموقع الجغرافي العالية الدقة في VPS وقدرات Gemini التوليدية، يمكننا إنشاء تجارب تفهم الموقع الجغرافي للمستخدم وما ينظر إليه.
لمساعدتك في تجربة Android XR، يسعدنا أن نعلن عن فتح باب تقديم الطلبات للانضمام إلى برنامج Android XR Developer Catalyst الذي يتضمّن XREAL Project Aura. اعتبارًا من اليوم، يمكنك تقديم طلب للحصول على حزمة أدوات تطوير Project Aura من XREAL أو حزمة أدوات تطوير نظارات بشاشة عرض خلال الأشهر القادمة.
*إخلاء مسؤولية: هذه الميزة متوفّرة على أجهزة محدّدة. يجب توفُّر اتصال بالإنترنت. ويمكن استخدامها على التطبيقات ومساحات العرض المتوافقة. قد تختلف النتائج.
-
أخبار المنتجاتأصبحت ميزة تصحيح الأخطاء لاسلكيًا على Android أسرع وأكثر موثوقية وأسهل في الإعداد من أي وقت مضى. في الإصدار 2.0 من ميزة "تصحيح الأخطاء عبر Wi-Fi باستخدام ADB"، طرحنا حزمة خادم جديدة وطريقة أكثر ذكاءً للتعامل مع الشبكة بهدف معالجة ملاحظات المطوّرين حول المشاكل المتعلّقة بسهولة الاستخدام.
Steven Jenkins, Sherif Eid, Fabien Sanglard • يستغرق الاطّلاع على المقال دقيقة واحدة -
أخبار المنتجاتهذا هو الإصدار الثابت النهائي من Android Studio Quail. تتيح لك الميزات الجديدة في Android Studio إنشاء تطبيقات مميّزة باستخدام الذكاء الاصطناعي بكفاءة وفعالية.
Amman Asfaw • يستغرق الاطِّلاع على المقال 5 دقائق -
أخبار المنتجاتالحفاظ على منظومة Android المتكاملة الصحية هو التزام مشترك يضطلع فيه كل تطبيق ولعبة بدور مهم.
Raghavendra Hareesh Pottamsetty • مدة القراءة: 4 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.