La API de Geospatial usa una combinación de VPS y datos de GPS para generar poses geoespaciales de alta precisión. Se puede usar la API en cualquier lugar donde el dispositivo pueda determinar su ubicación:
- En áreas con baja precisión de GPS, como espacios interiores y entornos urbanos densos, la API utilizará la cobertura del VPS para generar poses de alta precisión.
- En entornos al aire libre con pocas obstrucciones aéreas o ninguna, la API de Geospatial puede usar los datos de ubicación del GPS disponibles para generar poses geoespaciales con alta precisión.
Puedes determinar la disponibilidad de VPS en una posición horizontal determinada antes de que comience la sesión de RA y usarla para crear experiencias más específicas (por ejemplo, para presentar un mensaje "Enter AR") solo cuando VPS está disponible.
Habilita la API de ARCore
Tu app debe habilitar la API de ARCore para verificar la disponibilidad de VPS.
Una vez que se habilita la API de ARCore, puedes verificar la disponibilidad de VPS sin lo siguiente:
- Es una instancia de
Session
en ejecución (antes de llamar aSession.resume()
). - Configurar un
GeospatialMode
Verifica la disponibilidad de VPS en tu app
La API de Geospatial se puede usar en cualquier lugar donde el dispositivo pueda determinar su ubicación. Si tu experiencia de RA depende de la cobertura de VPS, puedes usar Session.checkVpsAvailabilityAsync()
para obtener un VpsAvailabilityFuture
, una tarea asíncrona que verifica la disponibilidad del VPS en una posición horizontal determinada.
Una vez que tengas el elemento VpsAvailabilityFuture
, podrás obtener su resultado con un sondeo o una devolución de llamada.
Consulta los resultados
Usa Future.getState()
para obtener el estado de Future
. Existen tres estados diferentes:
PENDING
: Aún no se completó la operación, por lo que no se conoce ningún resultado.CANCELLED
:Future.cancel()
canceló la operación. Nunca se llamará a ninguna devolución de llamada registrada.DONE
: Se completó la operación. UsaVpsAvailabilityFuture.getResult()
para obtener el resultado.
Puedes seguir revisando Future.getState()
hasta que se complete la tarea.
Java
// Obtain a VpsAvailabilityFuture and store it somewhere. VpsAvailabilityFuture future = session.checkVpsAvailabilityAsync(latitude, longitude, null); // Poll VpsAvailabilityFuture later, for example, in a render loop. if (future.getState() == FutureState.DONE) { switch (future.getResult()) { case AVAILABLE: // VPS is available at this location. break; case UNAVAILABLE: // VPS is unavailable at this location. break; case ERROR_NETWORK_CONNECTION: // The external service could not be reached due to a network connection error. break; // Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ... } }
Kotlin
// Obtain a VpsAvailabilityFuture and store it somewhere. val future = session.checkVpsAvailabilityAsync(latitude, longitude, null) // Poll VpsAvailabilityFuture later, for example, in a render loop. if (future.state == FutureState.DONE) { when (future.result) { VpsAvailability.AVAILABLE -> { // VPS is available at this location. } VpsAvailability.UNAVAILABLE -> { // VPS is unavailable at this location. } VpsAvailability.ERROR_NETWORK_CONNECTION -> { // The external service could not be reached due to a network connection error. } else -> { TODO("Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...") } } }
Obtén el resultado mediante una devolución de llamada
También puedes obtener el resultado de un Future
a través de una devolución de llamada. Usa Session.checkVpsAvailabilityAsync()
y proporciona un callback
. Se llamará a este callback
en el subproceso principal poco después de que Future
tenga el estado DONE
.
Java
session.checkVpsAvailabilityAsync( latitude, longitude, result -> { // Callback is called on the Main thread. switch (result) { // Handle the VpsAvailability result as shown above. // For example, show UI that enables your AR view. } });
Kotlin
session.checkVpsAvailabilityAsync(latitude, longitude) { result -> // Callback is called on the Main thread. // Handle the VpsAvailability result as shown above. // For example, show UI that enables your AR view. TODO("Handle VpsAvailability " + result) }
Cancelar Future
Usa Future.cancel()
para intentar cancelar el Future
. Debido al paralelismo de subprocesos, es posible que el intento de cancelación no se realice correctamente.
Future.cancel()
muestra true
si este intento se realizó correctamente y, de lo contrario, muestra false
.
Usa la API de Geospatial sin cobertura de VPS
La API de Geospatial también se puede usar en áreas que no tienen cobertura VPS. En ambientes al aire libre con pocas obstrucciones por encima o ninguna, el GPS puede ser suficiente para generar una postura con alta precisión.
¿Qué sigue?
- Obtén la pose geoespacial de la cámara del dispositivo para determinar la ubicación exacta del dispositivo del usuario en el mundo real.