ARCore-Sitzung in Android NDK konfigurieren

Konfigurieren Sie eine ARCore-Sitzung, um AR-Inhalte für Ihre App zu erstellen.

Was ist eine Sitzung?

Alle AR-Prozesse wie Bewegungserkennung, Umgebungsverständnis und die Schätzung der Beleuchtung werden in einem ARCore-Modell durchgeführt, Sitzung. ArSession ist der Haupteinstiegspunkt für ARCore der API erstellen. Es verwaltet den AR-Systemstatus und den Sitzungslebenszyklus. die App, um eine Sitzung zu erstellen, zu konfigurieren, zu starten oder zu beenden. Am wichtigsten ist, ermöglicht es der App, Frames zu empfangen, die Zugriff auf das Kamerabild und Position des Geräts.

Die Sitzung kann verwendet werden, um die folgenden Funktionen zu konfigurieren:

Prüfen, ob ARCore installiert und auf dem neuesten Stand ist

Bevor Sie eine ArSession erstellen, prüfen Sie, ob ARCore installiert und auf dem neuesten Stand ist. Wenn ARCore nicht installiert ist, schlägt die Sitzungserstellung fehl und alle nachfolgenden Für die Installation oder das Upgrade von ARCore ist ein Neustart der App erforderlich.

/*
 * 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;
  }
}

Sitzung erstellen

Eine Sitzung in ARCore erstellen und konfigurieren

// 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);

Sitzung schließen

ArSession besitzt eine erhebliche Menge an nativem Heap-Speicher. Fehler bei die Sitzung explizit geschlossen werden, kann dies dazu führen, dass der Abstürze. Wenn die AR-Sitzung nicht mehr benötigt wird, rufe ArSession_destroy() auf, um die Ressourcen freizugeben.

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

Nächste Schritte