Mixed-Reality-Reiseführer mit Android XR, der Geospatial API und Gemini erstellen
Lesezeit: 6 Minuten
Auf der diesjährigen Google I/O haben wir ein Update für räumliche Erlebnisse angekündigt: Die Geospatial API ist jetzt als Vorabversion in ARCore für Jetpack XR verfügbar. Durch die Integration des Visual Positioning System (VPS) von Google in Android XR können digitale Inhalte in unterstützten Bereichen mit einer Genauigkeit von unter einem Meter und präziser Ausrichtung in der physischen Welt verankert werden.* Um herauszufinden, was mit der Geospatial API möglich ist, hat unser Team eine Demo erstellt: die XR Geospatial Tour.
Stell dir vor, du kommst in eine neue Stadt, setzt eine kabelgebundene XR-Brille auf (wie die kommende XREAL Project Aura) und hast sofort einen ortskundigen Local Guide, der dir die Gegend zeigt. Du musst nicht auf eine 2D-Karte starren, sondern wirst von 3D-Modellen sanft geleitet und eine intelligente Stimme erzählt dir etwas über die historischen Sehenswürdigkeiten, die du gerade siehst. Wir haben die Geospatial APIs, die Gemini API mit Firebase AI Logic, Google Maps Grounding und das Jetpack XR SDK kombiniert, um eine immersive, per Sprachbefehl gesteuerte Stadtführung zu erstellen.
Haftungsausschluss: Das Video und die Tour Guide-Anwendung dienen nur zu Demonstrationszwecken. Einige Sequenzen wurden gekürzt. Die abgebildete Hardware befindet sich möglicherweise noch in der Entwicklung. Die Produktdetails des finalen Produkts können abweichen.
Sehen wir uns die Implementierungsdetails an und wie wir diese APIs miteinander verknüpft haben, um eine globale räumliche Umgebung zu schaffen.
1. Nutzer mit der ARCore Geospatial API (VPS) lokalisieren
Verbessern Sie die Navigation in XR, indem Sie die Leistungsfähigkeit von GPS mit der Präzision von VPS kombinieren. Dank der Genauigkeit und präzisen Ausrichtung des VPS können 3D-Wegpunkte an der physischen Welt ausgerichtet werden.
Mit der Geospatial API für Android XR können Sie benutzerdefinierte Erlebnisse erstellen. Mithilfe von fortschrittlichem Computer Vision versucht das VPS, eine GeospatialPose (einschließlich Längengrad, Breitengrad und Richtung) bereitzustellen, die genauer als GPS ist.
So rufen wir die Geospatial-Pose des Nutzers ab, indem wir die Ausrichtung des Geräts einer Geospatial-Koordinate zuordnen:
// 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}") }
Da die gesamte Nutzererfahrung von dieser Genauigkeit abhängt, beobachten wir die horizontalAccuracy und orientationYawAccuracy, bis sie unsere Grenzwerte erreichen. Wenn sich der Nutzer in einem Gebäude oder in einem nicht erkannten Bereich befindet, wird er aufgefordert, „zu einem öffentlichen Ort im Freien zu gehen und sich umzusehen“.
2. Reiseplan mit der Gemini API und Fundierung mit Google Maps erstellen
Sobald wir einen Standort haben, verwenden wir die Gemini API mit Firebase AI Logic, um das Gemini-Modell aufzufordern, als lokaler Reiseführer zu fungieren. Wir übergeben die Koordinaten des Nutzers an das Modell und bitten es, eine strukturierte JSON-Antwort mit nahegelegenen Stadtrundgängen auszugeben:
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.")
Large Language Models sind hervorragend darin, detaillierte Beschreibungen zu generieren, können aber manchmal genaue Breiten- und Längengradkoordinaten halluzinieren. Um dieses Problem zu lösen, haben wir die KI mit Google Maps Grounding fundiert.
3. Eine Stimme, die Sie führt: Gemini 2.5 TTS
Damit der Reiseführer wirklich präsent wirkt, haben wir dynamische Voiceovers implementiert.
Mit dem gemini-2.5-flash-tts model können wir die Modellgenerierungskonfiguration so einrichten, dass sie nativ Audiodaten anstelle von nur Text zurückgibt. So kannst du die ResponseModality.AUDIO anfordern:
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-Inhalte mit Jetpack XR zum Leben erwecken
Das letzte Puzzleteil ist die Darstellung dieser Daten im Sichtfeld des Nutzers. Das Jetpack XR SDK ermöglicht einen intuitiven Übergang von einer 2D-Android-UI zu Spatial Computing.
Wir haben Jetpack Compose for XR verwendet, um räumliche Komponenten zu erstellen. Um POIs entlang der Tour darzustellen, haben wir eine Composable namens „InfoSphere“ erstellt. Sie enthält ein GltfModel einer 3D-Kugel, die im Raum schwebt und mit der interagiert werden kann, um Informationen anzuzeigen.
Mit dem Jetpack XR SDK können wir 3D-Modelle mithilfe von SpatialBox und SceneCoreEntity neben der Compose-UI platzieren. Außerdem haben wir InteractableComponent verwendet, um auf das Tippen von Nutzern zu reagieren.
Durch die Kombination von AnimatedSpatialVisibility für herkömmliche Compose-UI-Oberflächen mit SceneCoreEntity-3D-Elementen können wir Daten nahtlos in die physische Welt einfügen.
@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() } }) } } ) } }
Entdecken Sie, was mit Android XR möglich ist
Die Entwicklung der XR Geospatial Tour-App hat uns gezeigt, dass die Einstiegshürde für Android-Entwickler, die weltweite räumliche Erlebnisse schaffen möchten, so niedrig wie nie zuvor ist. Die Geospatial API ist jetzt als Vorabversion für Android XR verfügbar. Damit können Ihre Apps die physische Welt um sie herum nahtlos erfassen. Durch die Kombination der APIs von Compose for XR mit den hochpräzisen Standortdaten des VPS und den generativen Funktionen von Gemini können wir Erlebnisse schaffen, die sowohl den Standort des Nutzers als auch das, was er sich ansieht, berücksichtigen.
Damit Sie Android XR selbst ausprobieren können, freuen wir uns, Bewerbungen für das Android XR Developer Catalyst Program entgegenzunehmen, das auch XREAL Project Aura umfasst. Ab heute können Sie sich für den Zugriff auf ein XREAL Project Aura-Devkit oder unser Display-Brillen-Devkit in den kommenden Monaten bewerben.
*Rechtliche Hinweise: Verfügbar auf ausgewählten Geräten. Es ist eine Internetverbindung erforderlich. Funktioniert mit kompatiblen Apps und Oberflächen. Die Ergebnisse können variieren.
-
ProduktneuigkeitenApps, die auf die kommende Android-Version ausgerichtet sind, können mit der Berechtigung WRITE_CONTACTS nicht mehr direkt in Kontakte schreiben.
Roxanna Aliabadi Walker • Lesezeit: 6 Minuten -
ProduktneuigkeitenDie Entwicklung von KI-Agenten schreitet rasant voran und die Android-Entwicklung erreicht einen spannenden neuen Meilenstein: von der unterstützenden Codevervollständigung hin zu KI-Agenten, die unter Ihrer Anleitung End-to-End-Aufgaben ausführen. Sie haben die volle Auswahl und Flexibilität bei den Modellen und Agents, die Sie verwenden.
Jason Buchel • Lesezeit: 3 Minuten -
ProduktneuigkeitenHeute haben wir euch gezeigt, wie wir unsere Vision „Mehr als nur ein Store“ weiterentwickeln. Vom Tab „Mein Play“, der mittlerweile die persönliche Anlaufstelle für über 250 Millionen monatlich aktive Nutzer ist, bis hin zu unserer einheitlichen Gaming-Plattform, die über 700 Millionen Spielerprofile verbindet – Google Play ist immer da, wo die Nutzer sind.
Paul Feng • Lesezeit: 3 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.