L'API Geospatial utilizza una combinazione di dati VPS e GPS per generare pose geospaziali ad alta precisione. L'API può essere utilizzata in qualsiasi luogo in cui il dispositivo è in grado di determinare la propria 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 o nessuna ostruzione sopraelevata, l'API Geospatial potrebbe essere in grado di utilizzare i dati sulla posizione GPS disponibili per generare pose geospaziali con elevata precisione.
Puoi determinare la disponibilità del VPS in una determinata posizione orizzontale prima dell'inizio della sessione AR e utilizzarla per creare esperienze più specifiche, ad esempio per mostrare un pulsante "Accedi all'AR" solo quando il VPS è disponibile.
Attiva l'API ARCore
L'app deve attivare l'API ARCore per controllare la disponibilità del VPS.
Una volta attivata l'API ARCore, puoi controllare la disponibilità del VPS senza:
- Un
Session
corrente in esecuzione (prima di chiamareSession.resume()
). - Impostazione di un
GeospatialMode
.
Verificare la disponibilità del 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 del VPS, puoi utilizzare Session.checkVpsAvailabilityAsync()
per ottenere un VpsAvailabilityFuture
, un'attività asincrona che controlla la disponibilità del 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 è 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 subito 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 il tentativo è riuscito e false
in caso contrario.
Utilizzare l'API Geospatial senza copertura VPS
L'API Geospatial può essere utilizzata anche nelle aree che non hanno copertura VPS. In ambienti esterni con poche o nessuna ostruzione sopraelevata, il GPS potrebbe essere sufficiente per generare una posa con elevata precisione.
Passaggi successivi
- Ottenere la posizione geografica della fotocamera del dispositivo per determinare la posizione esatta del dispositivo dell'utente nel mondo reale.