Configurare una sessione ARCore in Android NDK

Configura una sessione ARCore per creare esperienze AR per la tua app.

Che cos'è una sessione?

Tutti i processi AR, come il rilevamento del movimento, la comprensione dell'ambiente e la stima dell'illuminazione, che avvengono all'interno di un ARCore durante la sessione. ArSession è il punto di accesso principale ad ARCore tramite Google Cloud CLI o tramite l'API Compute Engine. Gestisce lo stato del sistema AR e il ciclo di vita delle sessioni, l'app per creare, configurare, avviare o interrompere una sessione. Ma soprattutto, consente all'app di ricevere frame che consentono di accedere all'immagine della fotocamera e posa del dispositivo.

La sessione può essere utilizzata per configurare le seguenti funzionalità:

Verificare che ARCore sia installato e aggiornato

Prima di creare una ArSession, verifica che ARCore sia installato e aggiornato. Se ARCore non è installato, la creazione della sessione non va a buon fine e le eventuali sessioni successive l'installazione o l'upgrade di ARCore richiede il riavvio dell'app.

/*
 * Check if ARCore is currently usable, i.e. whether ARCore is supported and
 * up to date.
 */
int32_t is_arcore_supported_and_up_to_date(void* env, void* context) {
  ArAvailability availability;
  ArCoreApk_checkAvailability(env, context, &availability);
  switch (availability) {
    case AR_AVAILABILITY_SUPPORTED_INSTALLED:
      return true;
    case AR_AVAILABILITY_SUPPORTED_APK_TOO_OLD:
    case AR_AVAILABILITY_SUPPORTED_NOT_INSTALLED: {
      ArInstallStatus install_status;
      // ArCoreApk_requestInstall is processed asynchronously.
      CHECK(ArCoreApk_requestInstall(env, context, true, &install_status) ==
            AR_SUCCESS);
      return false;
    }
    case AR_AVAILABILITY_UNSUPPORTED_DEVICE_NOT_CAPABLE:
      // This device is not supported for AR.
      return false;
    case AR_AVAILABILITY_UNKNOWN_CHECKING:
      // ARCore is checking the availability with a remote query.
      // This function should be called again after waiting 200 ms
      // to determine the query result.
      handle_check_later();
      return false;
    case AR_AVAILABILITY_UNKNOWN_ERROR:
    case AR_AVAILABILITY_UNKNOWN_TIMED_OUT:
      // There was an error checking for AR availability.
      // This may be due to the device being offline.
      // Handle the error appropriately.
      handle_unknown_error();
      return false;

    default:  // All enum cases have been handled.
      return false;
  }
}

Crea una sessione

Crea e configura una sessione in ARCore.

// Create a new ARCore session.
ArSession* ar_session = NULL;
CHECK(ArSession_create(env, context, &ar_session) == AR_SUCCESS);

// Create a session config.
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);

// Do feature-specific operations here, such as enabling depth or turning on
// support for Augmented Faces.

// Configure the session.
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

Chiudere una sessione

ArSession possiede una quantità significativa di memoria heap nativa. Errore chiudere esplicitamente la sessione può causare l'esaurimento della memoria nativa dall'app in modo anomalo. Quando la sessione AR non è più necessaria, chiama ArSession_destroy() per svincolare le risorse.

// Release memory used by the AR session.
ArSession_destroy(session);

Passaggi successivi