L'API Geospatial utilizza una combinazione di dati VPS e GPS per generare pose geospaziali ad alta precisione. L'API può essere utilizzata ovunque il dispositivo sia in grado di determinarne la posizione:
- Nelle aree con scarsa precisione del GPS, come spazi interni ed ambienti urbani densi, l'API si baserà sulla copertura VPS per generare pose ad alta precisione.
- In ambienti esterni con poche ostruzioni aeree, l'API Geospatial potrebbe essere in grado di utilizzare i dati di posizione GPS disponibili per generare pose geospaziali con elevata precisione.
Puoi determinare la disponibilità dei VPS in una determinata posizione orizzontale prima dell'inizio della sessione AR e utilizzarla per creare esperienze più specifiche, ad esempio per presentare un "Entra in AR" solo quando VPS è disponibile.
Abilita l'API ARCore
L'app deve attivare l'API ARCore per controllare la disponibilità del VPS.
Una volta abilitata l'API ARCore, puoi verificare la disponibilità dei server VPS senza:
- Un
Session
attualmente in esecuzione (prima di chiamareSession.resume()
). - L'impostazione di un
GeospatialMode
.
Verificare la disponibilità dei VPS nell'app
L'API Geospatial può essere utilizzata in qualsiasi luogo in cui il dispositivo è in grado di determinare la propria posizione. Se la tua esperienza AR dipende dalla copertura dei VPS, puoi utilizzare Session.checkVpsAvailabilityAsync()
per ottenere un VpsAvailabilityFuture
, un'attività asincrona che controlla la disponibilità dei VPS in una determinata posizione orizzontale.
Una volta ottenuto VpsAvailabilityFuture
, puoi ottenere il risultato tramite polling o tramite un callback.
Effettua il sondaggio sul risultato
Utilizza Future.getState()
per ottenere lo stato del Future
. Esistono tre stati diversi:
PENDING
: l'operazione non è ancora completata, pertanto non è noto alcun risultato.CANCELLED
: l'operazione è stata annullata daFuture.cancel()
. Eventuali chiamate di ritorno registrate non verranno mai effettuate.DONE
: l'operazione è stata completata. UtilizzaVpsAvailabilityFuture.getResult()
per ottenere il risultato.
Puoi continuare a selezionare Future.getState()
finché l'attività non è completata.
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, ...") } } }
Ottenere il risultato tramite una chiamata di ritorno
Puoi anche ottenere il risultato di un Future
tramite un callback. Utilizza Session.checkVpsAvailabilityAsync()
e fornisci un callback
. Questo callback
verrà chiamato nel thread principale poco dopo che Future
avrà lo stato 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) }
Annullare l'Future
Usa Future.cancel()
per tentare di annullare l'Future
. A causa del parallelismo dei thread, è possibile che il tentativo di annullamento non vada a buon fine.
Future.cancel()
restituisce true
se questo tentativo è andato a buon fine e false
in caso contrario.
Utilizzare l'API Geospatial senza copertura VPS
L'API Geospatial può essere utilizzata anche in aree che non hanno una copertura VPS. In ambienti esterni con poche ostruzioni dall'alto o nessuna, il GPS può essere sufficiente per generare una posa con un'elevata precisione.
Passaggi successivi
- Ottenere la posizione geografica della fotocamera del dispositivo per determinare la posizione esatta del dispositivo dell'utente nel mondo reale.