Creazione di una guida turistica in realtà mista con Android XR, l'API Geospatial e Gemini
Tempo di lettura: 6 minuti
In occasione del Google I/O di quest'anno, abbiamo annunciato un aggiornamento per le esperienze spaziali: l'API Geospatial è ora disponibile come anteprima in ARCore per Jetpack XR. Integrando il sistema di posizionamento visivo (VPS) di Google in Android XR, Android XR consente di ancorare i contenuti digitali al mondo fisico con una precisione inferiore al metro e un orientamento preciso nelle aree supportate.* Per esplorare le potenzialità dell'API Geospatial, il nostro team ha creato una demo: l'XR Geospatial Tour.
Immagina di entrare in una nuova città, indossare un paio di occhiali XR con cavo (come il futuro XREAL Project Aura) e avere subito una guida locale esperta che ti accompagna. Non devi fissare una mappa 2D: i modelli 3D ti guidano delicatamente lungo il percorso e una voce intelligente ti parla dei monumenti storici che hai di fronte. Abbiamo combinato le API Geospatial, l'API Gemini utilizzando Firebase AI Logic, Google Maps Grounding e l'SDK Jetpack XR per creare un'esperienza di visita a piedi immersiva e a mani libere.
Disclaimer: le applicazioni Video e Guida turistica sono solo a scopo dimostrativo. Alcune sequenze sono state accorciate. L'hardware raffigurato potrebbe essere in fase di sviluppo; i dettagli del prodotto finale potrebbero variare.
Vediamo i dettagli dell'implementazione e mostriamo come abbiamo combinato queste API per creare un'esperienza spaziale su scala mondiale.
1. Individuare l'utente con l'API ARCore Geospatial (VPS)
Migliora l'esperienza di navigazione in XR combinando la potenza del GPS con la precisione del VPS. L'accuratezza e l'orientamento preciso offerti da VPS consentono ai waypoint 3D di allinearsi al mondo fisico.
Ecco perché l'API Geospatial su Android XR può aiutarti a creare esperienze personalizzate. Utilizzando la visione artificiale avanzata, VPS tenta di fornire una GeospatialPose (inclusi latitudine, longitudine e orientamento) più precisa del GPS.
Ecco come recuperiamo la postura geospaziale dell'utente mappando l'orientamento del dispositivo su una coordinata geospaziale:
// 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}") }
Poiché l'intera esperienza si basa su questa accuratezza, monitoriamo horizontalAccuracy e orientationYawAccuracy finché non raggiungono le nostre soglie. Se l'utente si trova in un ambiente interno o in una zona non riconosciuta, gli chiediamo di "recarsi in uno spazio pubblico all'aperto e guardarsi intorno".
2. Creazione dell'itinerario con l'API Gemini e il grounding di Google Maps
Una volta ottenuta una posizione, utilizziamo l'API Gemini con Firebase AI Logic per chiedere al modello Gemini di fungere da guida turistica locale. Passiamo le coordinate dell'utente al modello e gli chiediamo di restituire una risposta JSON strutturata contenente i tour a piedi nelle vicinanze:
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.")
I modelli linguistici di grandi dimensioni sono ottimi per generare descrizioni dettagliate, ma a volte possono allucinare coordinate esatte di latitudine/longitudine. Per risolvere questo problema, abbiamo utilizzato Google Maps Grounding per ancorare l'AI.
3. Una voce che ti guida: Gemini 2.5 TTS
Per rendere la guida turistica davvero presente, abbiamo implementato le voci fuori campo dinamiche.
Utilizzando gemini-2.5-flash-tts model, possiamo configurare la configurazione di generazione del modello in modo che restituisca in modo nativo i dati audio anziché solo il testo. Ecco come richiedere l'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. Dare vita al mondo in 3D con Jetpack XR
L'ultimo pezzo del puzzle è il rendering di questi dati nel campo visivo dell'utente. L'SDK Jetpack XR rende intuitivo il passaggio da un'interfaccia utente Android 2D allo spatial computing.
Abbiamo utilizzato Jetpack Compose per XR per creare componenti spaziali. Per rappresentare i punti di interesse lungo il tour, abbiamo creato un componente componibile chiamato InfoSphere, che contiene un GltfModel di un globo 3D che fluttua nello spazio e con cui è possibile interagire per visualizzare informazioni.
Utilizzando Jetpack XR SDK, possiamo posizionare modelli 3D insieme all'interfaccia utente Compose utilizzando SpatialBox e SceneCoreEntity. Abbiamo anche utilizzato InteractableComponent per rispondere ai tocchi degli utenti.
Combinando AnimatedSpatialVisibility per le tradizionali superfici dell'interfaccia utente di Compose con gli elementi 3D SceneCoreEntity, possiamo combinare perfettamente i dati con il mondo fisico.
@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() } }) } } ) } }
Esplora le possibilità offerte da Android XR oggi
La creazione dell'app XR Geospatial Tour ci ha dimostrato che la barriera all'ingresso per le esperienze spaziali su scala mondiale è più bassa che mai per gli sviluppatori Android. Con l'API Geospatial ora disponibile in anteprima su Android XR, le tue app possono comprendere facilmente il mondo fisico che le circonda. Combinando le API di Compose for XR con i dati sulla posizione ad alta precisione di VPS e le funzionalità generative di Gemini, possiamo creare esperienze che comprendono sia la posizione dell'utente sia ciò che sta guardando.
Per aiutarti a fare pratica con Android XR, siamo felici di aprire le candidature per il programma Android XR Developer Catalyst, che include XREAL Project Aura. A partire da oggi, nei prossimi mesi potrai richiedere l'accesso a un devkit XREAL Project Aura o al nostro devkit per occhiali con display.
*Disclaimer: disponibile su dispositivi selezionati. È necessaria una connessione a internet. Funziona su app e piattaforme compatibili. I risultati possono variare.
-
Notizie sui prodottiIn qualità di sviluppatori Android, avete molte scelte per quanto riguarda gli agenti, i LLM, gli strumenti e le interfacce a riga di comando (CLI) che utilizzate per lo sviluppo di app. Il nostro obiettivo è aiutarti a creare app per Android belle e di alta qualità, indipendentemente dal metodo di sviluppo che scegli.
Simona Milanovic • Tempo di lettura: 4 minuti -
Notizie sui prodottiSu Google Play, stiamo espandendo continuamente la nostra piattaforma di abbonamenti per aiutarti a favorire la crescita, adattarti a nuovi modelli di business e raggiungere i tuoi utenti esattamente dove si trovano.
Sheenam Mittal • Tempo di lettura: 4 minuti -
Notizie sui prodottiL'anno scorso, Android Studio è stato aperto a qualsiasi modello di AI. Oggi facciamo un ulteriore passo avanti introducendo il supporto per gli agenti di codifica che preferisci.
Matthew Warner • Tempo di lettura: 3 minuti
Ricevi gli ultimi approfondimenti sullo sviluppo per Android direttamente nella tua casella di posta ogni settimana.