إنشاء دليل سياحي للواقع المختلط باستخدام Android XR وGeospatial API وGemini
قراءة لمدة 6 دقائق
_في مؤتمر Google I/O لهذا العام_ ، أعلنّا عن تعديل للتجارب المكانية: أصبحت _Geospatial API_ متاحة الآن كمعاينة في _ARCore for Jetpack XR_. من خلال توفير نظام تحديد المواقع المرئية (VPS) من Google على Android XR، يتيح Android XR تثبيت المحتوى الرقمي في العالم المادي بدقة أقل من المتر وتوجيه دقيق في المناطق المتوافقة.* لاستكشاف إمكانات Geospatial API، أنشأ فريقنا عرضًا توضيحيًا: جولة XR الجغرافية المكانية.
تخيَّل أنّك تدخل مدينة جديدة وتضع نظارات بنظام الواقع الممتد سلكية (مثل XREAL Project Aura القادمة) وتحصل على الفور على دليل محلي خبير يريك المدينة. لا تحتاج إلى التحديق في خريطة ثنائية الأبعاد، بل ترشدك نماذج ثلاثية الأبعاد بلطف، ويخبرك صوت ذكي عن المعالم التاريخية أمامك مباشرةً. لقد جمعنا بين Geospatial APIs و Gemini API باستخدام Firebase AI Logic و Google Maps Grounding و Jetpack XR SDK لإنشاء تجربة جولة سير غامرة بدون استخدام اليدين.
إخلاء المسؤولية: الفيديو وتطبيق "الدليل السياحي" لأغراض العرض التوضيحي فقط. تم تقصير بعض التسلسلات. قد يكون أي جهاز معروض قيد التطوير، وقد تختلف تفاصيل المنتج النهائي.
لنستعرض تفاصيل التنفيذ ونوضّح كيف ربطنا واجهات برمجة التطبيقات هذه معًا لإنشاء تجربة مكانية على مستوى العالم.
1. تحديد موقع المستخدِم بدقة باستخدام ARCore Geospatial API (VPS)
يمكنك تحسين تجربة التنقّل في الواقع الممتد من خلال الجمع بين قوة نظام تحديد المواقع العالمي (GPS) ودقة نظام تحديد المواقع المرئية (VPS). تسمح الدقة والتوجيه الدقيق اللذان يوفّرهما نظام تحديد المواقع المرئية (VPS) بمحاذاة نقاط الطريق الثلاثية الأبعاد مع العالم المادي.
لهذا السبب، يمكن أن تساعدك Geospatial API على Android XR في إنشاء تجارب مخصّصة. باستخدام الرؤية الحاسوبية المتقدّمة، يحاول نظام تحديد المواقع المرئية (VPS) توفير GeospatialPose (بما في ذلك خط العرض وخط الطول والاتجاه) أكثر دقة من نظام تحديد المواقع العالمي (GPS).
إليك كيفية استرداد GeospatialPose للمستخدِم من خلال ربط توجيه الجهاز بإحداثيات جغرافية مكانية:
// 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 Maps Grounding
بعد الحصول على الموقع الجغرافي، نستخدم 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 TTS
لجعل الدليل السياحي يبدو حاضرًا فعلاً، نفّذنا تعليقات صوتية ديناميكية.
باستخدام 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. إضفاء الحيوية على التجربة في 3D باستخدام Jetpack XR
العنصر الأخير هو عرض هذه البيانات في مجال رؤية المستخدِم. تسهّل حزمة Jetpack XR SDK الانتقال من واجهة مستخدم Android ثنائية الأبعاد إلى الحوسبة المكانية.
استخدمنا Jetpack Compose for XR لإنشاء مكوّنات مكانية. لتمثيل نقاط الاهتمام على طول الجولة، أنشأنا دالة مركّبة تُسمى InfoSphere، وتحتوي على GltfModel لكرّة ثلاثية الأبعاد تطفو في الفضاء ويمكن التفاعل معها لعرض المعلومات.
باستخدام Jetpack XR SDK، يمكننا وضع نماذج ثلاثية الأبعاد بجانب واجهة مستخدم 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
أظهر لنا إنشاء تطبيق "جولة الواقع الممتد الجغرافية المكانية" أنّ حاجز الدخول إلى التجارب المكانية على مستوى العالم أقل من أي وقت مضى لمطوّري برامج Android. مع توفّر Geospatial API الآن في المعاينة على Android XR، يمكن لتطبيقاتك فهم العالم المادي من حولها بسلاسة. من خلال الجمع بين واجهات برمجة التطبيقات الخاصة بـ Compose for XR وبيانات الموقع الجغرافي العالية الدقة لنظام تحديد المواقع المرئية (VPS) والإمكانات التوليدية لـ Gemini، يمكننا إنشاء تجارب تفهم مكان المستخدِم وما ينظر إليه.
لمساعدتك في استخدام Android XR، يسرّنا فتح باب التقديم إلى برنامج Android XR Developer Catalyst Program، الذي يتضمّن XREAL Project Aura. اعتبارًا من اليوم، يمكنك التقديم للوصول إلى مجموعة أدوات تطوير XREAL Project Aura أو مجموعة أدوات تطوير النظارات المعروضة خلال الأشهر القادمة.
*إخلاء المسؤولية: تتوفّر الميزة على أجهزة معيّنة فقط. يجب توفُّر اتصال بالإنترنت. ويمكن استخدامها على التطبيقات ومساحات العرض المتوافقة. قد تختلف النتائج.
-
أخبار المنتجاتاليوم، شاركنا كيف ننقل رؤيتنا "أكثر من مجرد متجر" إلى فصلها التالي. من علامة التبويب "أنت"، التي أصبحت الآن الصفحة الرئيسية الشخصية لأكثر من 250 مليون مستخدِم نشط شهريًا، إلى منصة الألعاب الموحّدة التي تربط أكثر من 700 مليون ملف شخصي للاعبين، يلبّي Google Play احتياجات المستخدِمين أينما كانوا.
Paul Feng • قراءة لمدة 3 دقائق -
أخبار المنتجاتبصفتكم مطوّري برامج Android، تتوفّر لكم خيارات عديدة عندما يتعلق الأمر بالوكلاء والنماذج اللغوية الكبيرة والأدوات وواجهات سطر الأوامر (CLI) التي تستخدمونها لتطوير التطبيقات. هدفنا هو مساعدتكم في إنشاء تطبيقات Android جميلة وعالية الجودة، بغض النظر عن الطريقة التي تختارونها.
Simona Milanovic • قراءة لمدة 4 دقائق -
أخبار المنتجاتعلى Google Play، نعمل باستمرار على توسيع منصة الاشتراكات لمساعدتك في تعزيز النمو والتكيّف مع نماذج الأعمال الجديدة وتلبية احتياجات المستخدِمين أينما كانوا.
Sheenam Mittal • قراءة لمدة 4 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android أسبوعيًا في بريدك الوارد.