Mixed-Reality-Reiseführer mit Android XR, der Geospatial API und Gemini erstellen
Lesezeit: 7 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 Vorschauversion 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 einer präzisen Ausrichtung in der realen Welt verankert werden. Um zu zeigen, was mit der Geospatial API möglich ist, hat unser Team eine Demo entwickelt: die XR Geospatial Tour.
Stellen Sie sich vor, Sie kommen in eine neue Stadt, setzen eine kabelgebundene XR-Brille auf (wie die kommende XREAL Project Aura) und haben sofort einen sachkundigen lokalen Guide, der Ihnen die Stadt zeigt. Sie müssen nicht auf eine 2D-Karte schauen. Stattdessen werden Sie von 3D-Modellen geführt und eine intelligente Stimme informiert Sie über die historischen Sehenswürdigkeiten, die sich direkt vor Ihnen befinden. Wir haben die Geospatial APIs, die Gemini API mit Firebase AI Logic, Google Maps Grounding und das Jetpack XR SDK kombiniert, um eine immersive, freihändige Walking-Tour zu erstellen.
Haftungsausschluss: Die Video- und Tour Guide-Anwendung dienen nur zu Demonstrationszwecken. Einige Sequenzen wurden gekürzt. Die abgebildete Hardware befindet sich möglicherweise noch in der Entwicklung. Die Eigenschaften des finalen Produkts können abweichen.
Sehen wir uns die Implementierungsdetails an und zeigen wir, wie wir diese APIs kombiniert haben, um eine räumliche Erfahrung auf Weltniveau zu schaffen.
1. Nutzer mit der ARCore Geospatial API (VPS) lokalisieren
Die Navigation in XR lässt sich verbessern, indem Sie die Leistungsfähigkeit von GPS mit der Präzision von VPS kombinieren. Dank der Genauigkeit und präzisen Ausrichtung von VPS können 3D-Wegpunkte an der realen Welt ausgerichtet werden.
Deshalb können Sie mit der Geospatial API auf Android XR benutzerdefinierte Erlebnisse schaffen. Mithilfe von fortschrittlichem Computer Vision versucht VPS, eine GeospatialPose (einschließlich Breiten- und Längengrad sowie Ausrichtung) bereitzustellen, die genauer als GPS ist.
So rufen wir die raumbezogene Ausrichtung des Nutzers ab, indem wir die Ausrichtung des Geräts einer raumbezogenen 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 Funktion auf dieser Genauigkeit beruht, überwachen wir die horizontalAccuracy und orientationYawAccuracy, bis sie unsere Grenzwerte erreichen. Wenn sich der Nutzer in Innenräumen oder in einem nicht erkannten Bereich befindet, fordern wir ihn auf, „zu einem öffentlichen Ort im Freien zu gehen und sich umzusehen“.
2. Reiseplan mit der Gemini API und Google Maps-Fundierung 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 Wanderrouten 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.")
Große Sprachmodelle können zwar sehr detaillierte Beschreibungen generieren, aber manchmal halluzinieren sie genaue Breiten- und Längengradkoordinaten. 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 sich der Reiseführer wirklich präsent anfühlt, haben wir dynamische Voiceovers implementiert.
Mit gemini-2.5-flash-tts model können wir unsere Modellgenerierungskonfiguration so konfigurieren, dass Audiodaten anstelle von Text zurückgegeben werden. So beantragen Sie die 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. Mit Jetpack XR in 3D zum Leben erwecken
Der letzte Schritt ist das Rendern dieser Daten im Sichtfeld des Nutzers. Mit dem Jetpack XR SDK ist der Übergang von einer 2D-Android-UI zu Spatial Computing ganz einfach.
Wir haben Jetpack Compose für XR verwendet, um räumliche Komponenten zu erstellen. Um Sehenswürdigkeiten entlang der Tour darzustellen, haben wir eine Composable namens „InfoSphere“ erstellt, die ein GltfModel einer 3D-Kugel enthält, die im Raum schwebt und mit der interagiert werden kann, um Informationen zu erhalten.
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 Nutzer-Taps 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 einblenden.
@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() } }) } } ) } }
Möglichkeiten von Android XR
Die Entwicklung der XR Geospatial Tour-App hat uns gezeigt, dass die Einstiegshürde für räumliche Erlebnisse im großen Maßstab für Android-Entwickler niedriger ist als je zuvor. Die Geospatial API ist jetzt als Vorschauversion für Android XR verfügbar. Ihre Apps können damit die physische Welt um sie herum nahtlos erfassen. Durch die Kombination der APIs von Compose for XR mit den hochpräzisen Standortdaten von VPS und den generativen Funktionen von Gemini können wir Anwendungen entwickeln, die sowohl den Standort des Nutzers als auch das, was er sich ansieht, erkennen.
Damit Sie Android XR selbst ausprobieren können, freuen wir uns, die Anmeldungen für das Android XR Developer Catalyst Program zu eröffnen, das XREAL Project Aura umfasst. Ab heute können Sie sich für den Zugriff auf ein XREAL Project Aura-Entwicklerkit oder unser Entwicklerkit für Displaybrillen 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.
-
Das ist uns allen schon passiert: Wir scrollen in einem schwach beleuchteten Raum durch unseren Social-Media-Feed und plötzlich wird ein HDR-Video angezeigt. Es ist so hell, dass Sie die Augen zusammenkneifen müssen, oder Sie verringern die Helligkeit des Displays, um die Bildunterschrift lesen zu können.
Tibian Elsheikh, Jeffrey Jose • Lesezeit: 2 Minuten -
Heute veröffentlichen wir Android 17, das auf den meisten unterstützten Pixel-Geräten verfügbar sein wird. In den kommenden Monaten werden neue Geräte mit Android 17 auf den Markt kommen.
Matthew McCullough • Lesezeit: 13 Minuten -
ProduktneuheitenWir bei Google Play möchten Nutzern die bestmögliche Erfahrung bieten und gleichzeitig dafür sorgen, dass Entwickler die Tools und Flexibilität haben, die sie für ihren Erfolg benötigen.
Paul Feng • Lesezeit: 3 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.