Controlla la disponibilità del servizio VPS nella posizione attuale del dispositivo

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 determinare la sua posizione:

  • Nelle aree con scarsa precisione GPS, come spazi interni e ambienti urbani ad alta densità, l'API si affiderà alla copertura VPS per generare pose ad alta precisione.
  • In ambienti esterni con poche ostruzioni sopra l'alto o nessuna, l'API Geospatial potrebbe essere in grado di utilizzare i dati di posizione GPS disponibili per generare pose geospaziali con alta precisione.

Puoi determinare la disponibilità di VPS in una determinata posizione orizzontale prima dell'inizio della sessione AR e utilizzarla per creare esperienze più specifiche, ad esempio per presentare un pulsante "Inserisci AR" solo quando VPS è disponibile.

Abilita l'API ARCore

La tua app deve abilitare l'API ARCore per verificare la disponibilità di VPS.

Una volta abilitata l'API ARCore, puoi controllare la disponibilità di VPS senza:

Verificare la disponibilità di VPS nell'app

L'API Geospatial può essere utilizzata ovunque il dispositivo sia in grado di determinare la sua posizione. Se la tua esperienza AR dipende dalla copertura VPS, puoi utilizzare ArSession_checkVpsAvailabilityAsync() per ottenere un'ArVpsAvailabilityFuture, un'attività asincrona che verifica la disponibilità dei VPS in una determinata posizione orizzontale. Una volta che hai la ArVpsAvailabilityFuture, puoi ottenerne i risultati con il polling o tramite un callback.

Sondaggio sul risultato

Utilizza ArFuture_getState() per conoscere lo stato di ArFuture. Esistono tre diversi stati:

Puoi continuare a controllare ArFuture_getState() fino al completamento dell'attività.

// Obtain a ArVpsAvailabilityFuture and store it somewhere.
ArVpsAvailabilityFuture* future = NULL;
CHECK(ArSession_checkVpsAvailabilityAsync(ar_session, latitude, longitude,
                                          NULL, NULL, &future) == AR_SUCCESS);

// Poll ArVpsAvailabilityFuture later, for example, in a render loop.
ArFutureState future_state = AR_FUTURE_STATE_PENDING;
ArFuture_getState(ar_session, (ArFuture*)future, &future_state);
if (future_state == AR_FUTURE_STATE_DONE) {
  ArVpsAvailability vps_availability = AR_VPS_AVAILABILITY_UNKNOWN;
  ArVpsAvailabilityFuture_getResult(ar_session, future, &vps_availability);
  switch (vps_availability) {
    case AR_VPS_AVAILABILITY_AVAILABLE:
      // VPS is available at this location.
      break;
    case AR_VPS_AVAILABILITY_UNAVAILABLE:
      // VPS is unavailable at this location.
      break;
    case AR_VPS_AVAILABILITY_ERROR_NETWORK_CONNECTION:
      // The external service could not be reached due to a network connection
      // error.
      break;

      // Handle other error states, e.g.
      // AR_VPS_AVAILABILITY_ERROR_RESOURCE_EXHAUSTED,
      // AR_VPS_AVAILABILITY_ERROR_INTERNAL, ...
  }
  ArFuture_release((ArFuture*)future);
}

Ottenere il risultato tramite callback

Puoi anche ottenere il risultato di un ArFuture tramite un callback. Utilizza ArSession_checkVpsAvailabilityAsync() e fornisci un callback. Questo callback verrà chiamato nel thread principale subito dopo che ArFuture avrà raggiunto lo stato AR_FUTURE_STATE_DONE.

void vps_availability_callback(void* context, ArVpsAvailability availability) {
  // Callback is called on the Main thread.

  // Handle the ArVpsAvailability result as shown above.
  // For example, show UI that enables your AR view.

  // It is a best practice to free `context` memory at the end of the callback.
  free(context);
}

void check_availability_with_callback(ArSession* ar_session, double latitude,
                                      double longitude) {
  ArVpsAvailabilityFuture* future = NULL;
  void* context = NULL;
  CHECK(ArSession_checkVpsAvailabilityAsync(
      ar_session, latitude, longitude, context, vps_availability_callback,
      &future) == AR_SUCCESS);
}

Annulla ArFuture

Utilizza ArFuture_cancel() per tentare di annullare il ArFuture. A causa del parallelismo dei thread, è possibile che il tuo tentativo di annullamento non vada a buon fine. ArFuture_cancel() restituisce 1 se questo tentativo è riuscito e 0 in caso contrario.

Usa l'API Geospatial senza copertura VPS

L'API Geospatial può essere utilizzata anche in aree che non dispongono di copertura VPS. In ambienti all'aperto con poche ostruzioni o nessuna ostruzione, il GPS può essere sufficiente per acquisire una posizione con precisione.

Passaggi successivi