Para usar la API de Geospatial en tu app, esta debe estar configurada para acceder a la API de ARCore en Google Cloud. Esta API contiene el servicio de posicionamiento visual, que proporciona un posicionamiento preciso con datos de Google Street View.
Esta guía te ayuda a configurar un proyecto de Google Cloud que tenga habilitados los métodos de autorización y la API correctos para acceder a la API.
Configura un proyecto de Google Cloud o usa uno existente
Si tienes un proyecto de Google Cloud existente, selecciónalo.
Si no tienes un proyecto existente, crea uno.
Habilita la API de ARCore
Para usar la API de ARCore, debes habilitarla en tu proyecto.
Configura la autorización para Google Cloud
Una aplicación para Android puede comunicarse con la API de ARCore con dos métodos de autorización diferentes: la autorización sin clave (OAuth 2.0), que es el método recomendado, y la autorización con clave de API:
- La autorización sin clave usa una combinación del nombre del paquete de la aplicación y la huella digital de la clave de firma para autorizar tu aplicación.
Una clave de API es una cadena que identifica un proyecto de Google Cloud. Por lo general, las claves de API no se consideran seguras, ya que los clientes suelen tener acceso a ellas. Considera usar la autorización sin clave para comunicarte con la API de ARCore.
Autorización sin claves
Para autorizar tu app con la autenticación sin clave, crea IDs de cliente de OAuth 2.0.
En Google Cloud, ve a la página Credenciales.
Haz clic en Crear credenciales y, luego, selecciona ID de cliente de OAuth en el menú.
Completa los campos obligatorios de la siguiente manera:
- Tipo de aplicación: Elige Android.
- Nombre del paquete: Usa el nombre del paquete como se declara en tu
AndroidManifest.xml. - Huella digital del certificado SHA-1: Obtén las huellas digitales del certificado SHA-1 con las instrucciones que se indican en Autenticación de clientes.
Presiona Crear.
Clave de API
Para crear una clave de API desde la consola de Google Cloud, sigue estos pasos:
En la consola de Google Cloud, ve a la página Credenciales.
Haz clic en Crear credenciales y, luego, selecciona Clave de API en el menú.
Agrega una restricción de API para la API de ARCore. Para obtener más información, consulta Aplica restricciones de clave de API.
Haz clic en Crear. Se mostrará la cadena a la clave recién creada en el cuadro de diálogo Se creó la clave de API.
En Android Studio, agrega la nueva clave de API a tu proyecto. Incluye la clave de API
en un elemento <meta-data> dentro del elemento
<application> en el archivo
AndroidManifest.xml de tu app:
<meta-data
android:name="com.google.android.ar.API_KEY"
android:value="API_KEY"/>
Solicita los permisos necesarios
Para usar la API de Geospatial en ARCore con Jetpack XR, tu app debe solicitar los siguientes permisos de tiempo de ejecución:
ACCESS_FINE_LOCATION: Es obligatorio para determinar la ubicación precisa de un usuario.
En dispositivos móviles, la API de Geospatial también requiere los siguientes permisos:
android.permission.CAMERA: Es obligatorio para acceder a la cámara del dispositivo.android.permission.INTERNET: Es obligatorio para comunicarse con los servicios de Google Cloud.
Cómo acceder a una sesión
Accede a la información geoespacial a través de un Session de Jetpack XR Runtime,
que tu app debe crear.
Configura la sesión
La API de Geospatial no está habilitada de forma predeterminada en las sesiones de XR. Tu app debe
habilitarla de forma explícita configurando un GeospatialMode en el Session. Los
siguientes modos están disponibles:
GeospatialMode.SPATIAL: La API de Geospatial está habilitada. La API de Geospatial usa el sistema de posicionamiento visual (VPS), los datos del sistema de posicionamiento global (GPS) y los sensores de movimiento del dispositivo para determinar la posición geoespacial del dispositivo. Este modo no está disponible en dispositivos de anteojos inteligentes.GeospatialMode.INERTIAL: La API de Geospatial está habilitada en el modo de bajo consumo. La API de Geospatial solo usa el GPS y los sensores de movimiento del dispositivo para determinar su pose geoespacial. Este modo solo está disponible en dispositivos de anteojos inteligentes.GeospatialMode.DISABLED: La API de Geospatial está inhabilitada. Cuando se cambia de otro modo a este, la API de Geospatial libera todos los recursos adquiridos y deja de realizar el seguimiento.
No todos los dispositivos admiten todos los modos geoespaciales. Consulta
GeospatialMode para obtener más información. Usa
XrDevice.isGeospatialSupported para saber si se admite un
GeospatialMode determinado.
En la siguiente muestra de código, se indica cómo establecer un GeospatialMode con Session.configure.
// Define the configuration object to enable Geospatial features. val newConfig = Config.Builder(session.config) .setGeospatial(GeospatialMode.SPATIAL) .build() // Apply the configuration to the session. try { when (val configResult = session.configure(newConfig)) { is SessionConfigureSuccess -> { // The session is now configured to use the Geospatial API. } else -> { // Handle other configuration errors (e.g., missing library dependencies). } } } catch (e: UnsupportedOperationException) { // Handle configuration failure if the mode is not supported. }
Solicitar al usuario que permita el uso de los datos del dispositivo
Las apps que usan la API de Geospatial con ARCore para Jetpack XR deben presentar al usuario un mensaje para que confirme y permita el uso de datos de su dispositivo. Consulta los requisitos de privacidad del usuario para obtener más información.
Usa el objeto Geospatial
Una vez que se haya configurado la sesión, obtén el objeto Geospatial con Geospatial.getInstance. Solo usa el objeto Geospatial cuando su estado sea GeospatialTrackingState.RUNNING.
En las siguientes muestras de código, se indica cómo supervisar el estado geoespacial con Geospatial.state.
Compose XR
val geospatial = remember { Geospatial.getInstance(session) } val geospatialState by geospatial.state.collectAsStateWithLifecycle() if (geospatialState.geospatialTrackingState == Geospatial.GeospatialTrackingState.RUNNING) { // Queries to the Geospatial API are only valid when the state is RUNNING. }
SceneCore
val geospatial = Geospatial.getInstance(session) lifecycleScope.launch { geospatial.state.collect { geospatialState -> if (geospatialState == Geospatial.GeospatialTrackingState.RUNNING) { // Queries to the Geospatial API are only valid when the state is RUNNING. } } }
Información sobre los valores de precisión
Cuando la API de Geospatial está habilitada, proporciona tres valores de precisión: horizontal, vertical y de orientación. Estos valores de exactitud se actualizan con el tiempo y se pueden volver más precisos a medida que se adquieren más datos. Los valores más altos indican una exactitud más baja y se definen como el radio de un nivel de confianza del 68%. En otras palabras, hay un 68% de probabilidades de que el valor real se encuentre dentro del radio dado del valor estimado.
Usa
Geospatial.State.horizontalAccuracy,
verticalAccuracy y
orientationYawAccuracy para obtener los
valores de precisión actuales.
Es posible que tu app requiera un nivel específico de precisión para funcionar correctamente. Por ejemplo, es posible que tu app deba esperar hasta que la precisión horizontal sea inferior a 5 metros antes de renderizar contenido virtual. Para aumentar la probabilidad de obtener datos de mayor precisión, tu app debe indicarles a los usuarios que miren a su alrededor, preferentemente a edificios o a otros elementos con un alto nivel de detalle visual que estén presentes en Google Street View. Usa Geospatial.checkVpsAvailability para determinar si el VPS está disponible en la ubicación determinada.
¿Qué sigue?
Cuando la API de Geospatial esté configurada correctamente en tu app, esta podrá hacer lo siguiente:
- Cómo realizar conversiones entre poses locales del dispositivo y poses geoespaciales
- Renderiza contenido en posiciones geoespaciales