Google setzt sich dafür ein, die Rassengerechtigkeit für schwarze Gemeinschaften zu fördern. Siehe wie.

Aktivieren Sie ARCore

Auf dieser Seite wird beschrieben, wie Sie die ARCore-Funktionalität in Ihren Android Studio-Projekten aktivieren. Dazu müssen Sie:

  1. Wählen Sie für Ihre App zwischen AR Erforderlich und AR Optional
  2. Fügen Sie dem Manifest Ihrer App AR Required- oder AR Optional-Einträge hinzu
  3. Fügen Sie Ihrem Projekt Build-Abhängigkeiten hinzu
  4. Führen Sie Laufzeitprüfungen durch , um Folgendes sicherzustellen:
    • Das Gerät unterstützt ARCore ,
    • Darauf ist Google Play Services für AR installiert.
    • Die Kameraerlaubnis wurde erteilt.
  5. Stellen Sie sicher, dass Ihre App den Datenschutzanforderungen von ARCore entspricht

Wählen Sie zwischen AR Erforderlich oder AR Optional

Eine App, die AR-Funktionen unterstützt, kann auf zwei Arten konfiguriert werden: AR Erforderlich und AR Optional .

Eine AR Required App kann ohne ARCore nicht funktionieren. Um verwendet werden zu können, benötigt eine AR Required-App ein von ARCore unterstütztes Gerät , auf dem Google Play Services für AR installiert ist.

Eine optionale AR- App verwendet ARCore, um eine andere Funktionalität zu erweitern. Eine optionale AR-App verfügt über optionale AR-Funktionen, die nur auf ARCore-unterstützten Geräten aktiviert sind, auf denen Google Play Services for AR installiert ist.

  • AR Optionale Apps können auf Geräten installiert und ausgeführt werden, die ARCore nicht unterstützen.

  • Wenn Benutzer eine optionale AR-App installieren, installiert der Google Play Store Google Play Services für AR nicht automatisch mit der App.

AR Erforderlich AR Optional
Verwendung der AR-Funktionen Ihre App benötigt ARCore für grundlegende Funktionen. ARCore erweitert die Funktionalität Ihrer App. Ihre App kann ohne ARCore-Unterstützung ausgeführt werden.
Sichtbarkeit des Play Store Ihre App wird nur auf Geräten mit ARCore-Unterstützung im Play Store aufgeführt. Ihre App folgt den normalen Auflistungsverfahren .
Installationsmethode für Google Play Services für AR Der Play Store installiert Google Play Services für AR neben Ihrer App. Ihre App verwendet ArCoreApk.requestInstall() , um ARCore herunterzuladen und zu installieren.
Android minSdkVersion Anforderungen Android 7.0 (API Level 24) Android 4.0 (API Level 14)
Muss ArCoreApk.checkAvailability() , um die ARCore-Unterstützung und den Installationsstatus zu überprüfen
Muss ArCoreApk.requestInstall() , um Google Play Services für AR zu installieren

Weitere Informationen finden Sie unter Veröffentlichen von AR-Apps im Google Play Store .

Hinzufügen von Einträgen zum Manifest Ihrer App

AndroidManifest.xml Ihre AndroidManifest.xml , dass sie die folgenden Einträge enthält:

AR Erforderlich

<uses-permission android:name="android.permission.CAMERA" />

<!-- Limits app visibility in the Google Play Store to ARCore supported devices
     (https://developers.google.com/ar/devices). -->
<uses-feature android:name="android.hardware.camera.ar" />

<application …>
    …

    <!-- "AR Required" app, requires "Google Play Services for AR" (ARCore)
         to be installed, as the app does not include any non-AR features. -->
    <meta-data android:name="com.google.ar.core" android:value="required" />
</application>

AR Optional

<uses-permission android:name="android.permission.CAMERA" />

<application …>
    …

    <!-- "AR Optional" app, contains non-AR features that can be used when
         "Google Play Services for AR" (ARCore) is not available. -->
    <meta-data android:name="com.google.ar.core" android:value="optional" />
</application>

minSdkVersion Sie dann sicher, dass Ihre App mindestens die erforderliche minSdkVersion im minSdkVersion Ihrer App build.gradle :

AR Erforderlich

android {
    defaultConfig {
        …
        minSdkVersion 24
    }
}

AR Optional

android {
    defaultConfig {
        …
        minSdkVersion 14
    }
}

Fügen Sie Build-Abhängigkeiten hinzu

Führen Sie die folgenden Schritte aus, um Ihrem Android Studio-Projekt ARCore hinzuzufügen:

  • build.gradle Sie sicher , dass die build.gradle Datei Ihres Projekts das Maven-Repository von Google enthält:

    allprojects {
        repositories {
            google()
            …
        }
    }
    
  • Fügen Sie die neueste ARCore-Bibliothek als Abhängigkeit in die build.gradle Datei Ihrer App ein :

    dependencies {
        …
        implementation 'com.google.ar:core:1.24.0'
    }
    

Führen Sie Laufzeitprüfungen durch

Überprüfen Sie, ob ARCore unterstützt wird

Sowohl AR Required als auch AR Optional Apps sollten ArCoreApk.checkAvailability() um festzustellen, ob das aktuelle Gerät ARCore unterstützt. Auf Geräten, die ARCore nicht unterstützen, sollten Apps AR-bezogene Funktionen deaktivieren und zugehörige UI-Elemente ausblenden.

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Enable AR-related functionality on ARCore supported devices only.
  maybeEnableArButton();
  …
}

void maybeEnableArButton() {
  ArCoreApk.Availability availability = ArCoreApk.getInstance().checkAvailability(this);
  if (availability.isTransient()) {
    // Continue to query availability at 5Hz while compatibility is checked in the background.
    new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
        maybeEnableArButton();
      }
    }, 200);
  }
  if (availability.isSupported()) {
    mArButton.setVisibility(View.VISIBLE);
    mArButton.setEnabled(true);
  } else { // The device is unsupported or unknown.
    mArButton.setVisibility(View.INVISIBLE);
    mArButton.setEnabled(false);
  }
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)

  // Enable AR-related functionality on ARCore supported devices only.
  maybeEnableArButton()
  …
}

fun maybeEnableArButton() {
  val availability = ArCoreApk.getInstance().checkAvailability(this)
  if (availability.isTransient) {
    // Continue to query availability at 5Hz while compatibility is checked in the background.
    Handler().postDelayed({
      maybeEnableArButton()
    }, 200)
  }
  if (availability.isSupported) {
    mArButton.visibility = View.VISIBLE
    mArButton.isEnabled = true
  } else { // The device is unsupported or unknown.
    mArButton.visibility = View.INVISIBLE
    mArButton.isEnabled = false
  }
}

Obwohl Google Play Services für AR neben Ihrer AR Required-App installiert ist, können Benutzer mit nicht unterstützten Geräten diese möglicherweise von einer externen Quelle installieren. Die Verwendung von checkAvailability() zur Überprüfung der ARCore-Unterstützung gewährleistet eine konsistente Benutzererfahrung.

checkAvailability() möglicherweise Netzwerkressourcen abfragen, um festzustellen, ob das Gerät ARCore unterstützt. Während dieser Zeit wird UNKNOWN_CHECKING . Um die wahrgenommene Latenz und das Pop-In zu verringern, sollten Apps checkAvailability() einmal zu Beginn ihres Lebenszyklus aufrufen, um die Abfrage zu initiieren und den zurückgegebenen Wert zu ignorieren. Auf diese Weise ist ein zwischengespeichertes Ergebnis sofort verfügbar, wenn maybeEnableArButton() aufgerufen wird.

Kameraerlaubnis anfordern

Sowohl AR Optional- als auch AR Required- Apps müssen sicherstellen, dass die Kameraberechtigung erteilt wurde, bevor eine AR-Sitzung erstellt wird. Das Beispiel hello_ar_java enthält eine CameraPermissionHelper Klasse, die in Ihr Projekt kopiert und von der onResume() -Methode Ihrer AR-Aktivität onResume() werden kann:

Java

@Override
protected void onResume() {
  super.onResume();

  // ARCore requires camera permission to operate.
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    CameraPermissionHelper.requestCameraPermission(this);
    return;
  }

  …
}

Kotlin

override fun onResume() {
  super.onResume()

  // ARCore requires camera permission to operate.
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    CameraPermissionHelper.requestCameraPermission(this)
    return
  }

  …
}

Ihre AR-Aktivität muss auch onRequestPermissionsResult() implementieren, wie in HelloArActivity :

Java

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
  super.onRequestPermissionsResult(requestCode, permissions, results);
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    Toast.makeText(this, "Camera permission is needed to run this application", Toast.LENGTH_LONG)
        .show();
    if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) {
      // Permission denied with checking "Do not ask again".
      CameraPermissionHelper.launchPermissionSettings(this);
    }
    finish();
  }
}

Kotlin

override fun onRequestPermissionsResult(
  requestCode: Int,
  permissions: Array<String>,
  results: IntArray
) {
  super.onRequestPermissionsResult(requestCode, permissions, results)
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    Toast.makeText(this, "Camera permission is needed to run this application", Toast.LENGTH_LONG)
      .show()
    if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) {
      // Permission denied with checking "Do not ask again".
      CameraPermissionHelper.launchPermissionSettings(this)
    }
    finish()
  }
}

Überprüfen Sie, ob Google Play Services für AR installiert ist

Um zu überprüfen, ob eine kompatible Version von Google Play Services für AR (noch) installiert ist, und um sicherzustellen, dass alle erforderlichen ARCore-Geräteprofildaten heruntergeladen wurden, müssen sowohl AR Required- als auch AR Optional-Apps ArCoreApk.requestInstall() aufrufen, bevor Sie ARCore erstellen Session. Dadurch wird der Benutzer aufgefordert, ARCore bei Bedarf zu installieren oder zu aktualisieren, und es wird sichergestellt, dass die erforderlichen ARCore-Geräteprofildaten heruntergeladen werden.

Java

// requestInstall(Activity, true) will triggers installation of
// Google Play Services for AR if necessary.
private boolean mUserRequestedInstall = true;

@Override
protected void onResume() {
  super.onResume();

  // Check camera permission.
  …

  // Ensure that Google Play Services for AR and ARCore device profile data are
  // installed and up to date.
  try {
    if (mSession == null) {
      switch (ArCoreApk.getInstance().requestInstall(this, mUserRequestedInstall)) {
        case INSTALLED:
          // Success: Safe to create the AR session.
          mSession = new Session(this);
          break;
        case INSTALL_REQUESTED:
          // When this method returns `INSTALL_REQUESTED`:
          // 1. ARCore pauses this activity.
          // 2. ARCore prompts the user to install or update Google Play
          //    Services for AR (market://details?id=com.google.ar.core).
          // 3. ARCore downloads the latest device profile data.
          // 4. ARCore resumes this activity. The next invocation of
          //    requestInstall() will either return `INSTALLED` or throw an
          //    exception if the installation or update did not succeed.
          mUserRequestedInstall = false;
          return;
      }
    }
  } catch (UnavailableUserDeclinedInstallationException e) {
    // Display an appropriate message to the user and return gracefully.
    Toast.makeText(this, "TODO: handle exception " + e, Toast.LENGTH_LONG)
        .show();
    return;
  } catch (…) {
    …
    return;  // mSession remains null, since session creation has failed.
  }
  …
}

Kotlin

// requestInstall(Activity, true) will triggers installation of
// Google Play Services for AR if necessary.
var mUserRequestedInstall = true

override fun onResume() {
  super.onResume()

  // Check camera permission.
  …

  // Ensure that Google Play Services for AR and ARCore device profile data are
  // installed and up to date.
  try {
    if (mSession == null) {
      when (ArCoreApk.getInstance().requestInstall(this, mUserRequestedInstall)) {
        ArCoreApk.InstallStatus.INSTALLED -> {
          // Success: Safe to create the AR session.
          mSession = Session(this)
        }
        ArCoreApk.InstallStatus.INSTALL_REQUESTED -> {
          // When this method returns `INSTALL_REQUESTED`:
          // 1. ARCore pauses this activity.
          // 2. ARCore prompts the user to install or update Google Play
          //    Services for AR (market://details?id=com.google.ar.core).
          // 3. ARCore downloads the latest device profile data.
          // 4. ARCore resumes this activity. The next invocation of
          //    requestInstall() will either return `INSTALLED` or throw an
          //    exception if the installation or update did not succeed.
          mUserRequestedInstall = false
          return
        }
      }
    }
  } catch (e: UnavailableUserDeclinedInstallationException) {
    // Display an appropriate message to the user and return gracefully.
    Toast.makeText(this, "TODO: handle exception " + e, Toast.LENGTH_LONG)
        .show()
    return
  } catch (…) {
    …
    return  // mSession remains null, since session creation has failed.
  }
  …
}

Einhaltung der Datenschutzanforderungen der Benutzer

Stellen Sie sicher, dass Ihre App den Datenschutzanforderungen von ARCore entspricht.

Nächste Schritte