Imagine entrar em uma nova cidade, colocar um par de óculos XR (como o futuro XREAL Project Aura), e instantaneamente ter um guia local conhecedor mostrando você ao redor. Você não precisa olhar para baixo em um mapa 2D - em vez disso, modelos 3D indicam gentilmente seu caminho e uma voz inteligente conta sobre os marcos históricos diretamente na sua frente. Combinamos as APIs Geoespaciais, a API Gemini usando Firebase AI Logic, o Google Maps Grounding e o Jetpack XR SDK para criar uma experiência de tour imersiva sem mãos.
*Aviso: O vídeo e a aplicação do Guia de Tours são apenas para fins demonstrativos. Algumas sequências foram encurtadas. Qualquer hardware mostrado pode estar em desenvolvimento; os detalhes do produto final podem ser diferentes.
Vamos caminhar pelos detalhes da implementação e mostrar como unimos essas APIs para criar uma experiência espacial de mundo inteiro.
1. Pontuando o Usuário com a API Geoespacial ARCore (VPS)
Aprimore sua experiência de navegação em XR combinando o poder do GPS com a precisão do VPS. A acurácia e orientação precisa que vem com o VPS permite que pontos de referência 3D se alinhem com o mundo físico.
É por isso que a API Geoespacial no Android XR pode ajudar você a construir experiências personalizadas. Usando visão computacional avançada, o VPS tenta fornecer uma GeospatialPose (incluindo latitude, longitude e direção) que é mais precisa do que GPS.
Aqui está como recuperamos a pose geoespacial do usuário mapeando a orientação do dispositivo para uma coordenada geoespacial:
// Recupere a pose geoespacial atual da sessão ARCore
val result = geospatial.createGeospatialPoseFromPose(arDevice.state.value.devicePose)
if (result is CreateGeospatialPoseFromPoseSuccess) {
val pose = result.pose
Log.d("VPS", "Localização Precisa: ${pose.latitude}, ${pose.longitude}")
}
Pois a experiência inteira depende dessa precisão, monitoramos horizontalAccuracy e orientationYawAccuracy até que eles atendam aos nossos limites. Se o usuário está dentro de casa ou em uma área não reconhecida, solicitamos que ele "caminhe para um espaço público ao ar livre e olhe ao redor".
2. Criando o Itinerário com a API Gemini & Google Maps Grounding
Uma vez que temos uma localização, usamos a API Gemini usando Firebase AI Logic para solicitar ao modelo Gemini atuar como um guia de tours local. Passamos as coordenadas do usuário ao modelo e pedimos que ele gere uma resposta JSON estruturada contendo tours a pé próximos:
val configForTools = ToolConfig(
functionCallingConfig = null,
retrievalConfig = retrievalConfig {
latLng = FirebaseLatLng(pose.latitude, pose.longitude)
languageCode = "en"
}
)
}
)
val result = model.generateContent("O usuário está na latitude ${pose.latitude} e longitude ${pose.longitude}. Gere exatamente 3 tours diversos próximos a esta localização (por exemplo, histórico, culinário, natureza). Todos os ideias de tour devem ser em distância de caminhada apenas.")
Os modelos de linguagem grande são ótimos para gerar descrições ricas, mas às vezes podem inventar coordenadas exatas de latitude/longitude. Para resolver isso, usamos Google Maps Grounding.
3. Uma Voz para Guiá-lo: Gemini 2.5 TTS
Para fazer o guia de tour parecer realmente presente, implementamos overdubagens dinâmicas.
Usando o modelo gemini-2.5-flash-tts, podemos configurar nossa configuração de geração do modelo para retornar dados de áudio em vez de apenas texto! Aqui está como você pode solicitar a ResponseModality.AUDIO:
val ttsModel = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel(
modelName = "gemini-2.5-flash-tts",
generationConfig = generationConfig {
// Instruir o modelo a retornar Áudio
responseModalities = listOf(ResponseModality.AUDIO)
}
)
val response = ttsModel.generateContent("Diga em uma voz neutra, mas positiva: $prompt")
// Extraia os bytes de áudio brutos da resposta
val audioBytes = response.candidates.firstOrNull()?.content?.parts
?.filterIsInstance<InlineDataPart>()
?.firstOrNull { it.mimeType.contains("audio") }?.inlineData
4. Tornando-o Real em 3D com Jetpack XR
A última peça do quebra-cabeça é renderizar esses dados no campo de visão do usuário. O SDK Jetpack XR torna intuitivo a transição de uma interface Android 2D para computação espacial.
Usamos o Jetpack Compose for XR para construir componentes espaciais. Para representar pontos de interesse ao longo do tour, criamos um componente chamado InfoSphere, que contém um modelo Gltf de uma esfera 3D flutuante no espaço e pode ser interagido para revelar informações.
Usando o SDK Jetpack XR, podemos colocar modelos 3D ao lado da interface Compose UI usando SpatialBox e SceneCoreEntity. Também usamos InteractableComponent para responder a toques do usuário.
@Composable
fun InfoSphere(
content: InfoBubbleContent,
session: Session,
sphereModel: GltfModel,
isSelected: Boolean,
onClick: () -> Unit
) {
// SpatialBox nos permite arranjar componentes 3D e SpatialPanels juntos
SpatialBox(
SubspaceModifier
.offset(x = 2.dp, y = 1.dp, z = (-3).dp) // Posicionado no espaço 3D
) {
// Anima suavemente a visibilidade da nossa superfície de UI Compose 2D
AnimatedSpatialVisibility(visible = isSelected) {
SpatialPanel {
InfoBubble(content) // Superfície regular de UI Compose 2D
}
}
// Renderize nossa esfera interativa 3D
SceneCoreEntity(
factory = {
GltfModelEntity.create(session, sphereModel).also { entity ->
// Faça o modelo 3D responder aos toques do usuário
entity.addComponent(InteractableComponent.create(session) { inputEvent ->
if (inputEvent.action == InputEvent.Action.UP) {
onClick()
}
})
}
}
)
}
}
A combinação de AnimatedSpatialVisibility para superfícies tradicionais Compose UI com elementos 3D SceneCore torna possível integrar dados na realidade física de forma fluida.
Explore o que é possível com Android XR hoje
A criação do aplicativo de tour geoespacial XR mostrou-nos que a barreira de entrada para experiências espaciais em escala mundial é menor do que nunca para desenvolvedores Android. Com a API Geoespacial agora disponível em pré-visualização no Android XR, seus aplicativos podem entender perfeitamente o mundo físico ao seu redor. Ao combinar os APIs do Compose para XR com os dados de localização de alta precisão do VPS e as capacidades gerativas do Gemini, podemos criar experiências que entendem tanto onde o usuário está quanto o que ele está olhando.
Para ajudá-lo a começar com Android XR, estamos felizes em abrir inscrições para o Programa de Catalisador do Desenvolvedor Android XR, que inclui o XREAL Project Aura. A partir de hoje, você pode se candidatar para obter acesso ao kit de desenvolvimento do XREAL Project Aura ou ao nosso kit de óculos de visualização nos próximos meses!

