Włącz AR, aby korzystać z funkcji rzeczywistości rozszerzonej w nowej lub istniejącej aplikacji.
Skonfiguruj aplikację jako AR wymagany lub AR opcjonalny
Aby oszczędzać miejsce na poszczególnych urządzeniach, wszystkie funkcje AR są przechowywane w aplikacji Usługi Google Play dla AR, która jest aktualizowana osobno przez Sklep Play. Aplikacje na Androida, które korzystają z funkcji AR, komunikują się z Usługami Google Play dla AR za pomocą pakietu ARCore SDK. Aplikację obsługującą funkcje AR można skonfigurować na 2 sposoby: Wymagana AR i Opcjonalny AR. To oznaczenie określa sposób interakcji aplikacji z aplikacją Usługi Google Play dla AR.
Aplikacja AR Required nie może działać bez ARCore. Wymaga to obsługi ARCore na urządzeniu z zainstalowanymi Usługami Google Play dla AR.
- W Sklepie Google Play będą dostępne tylko aplikacje wymagane przez AR na urządzeniach, które obsługują ARCore.
- Gdy użytkownicy instalują aplikację wymagającą AR, Sklep Google Play automatycznie zainstaluje na ich urządzeniu Usługi Google Play dla AR. Aplikacja musi jednak nadal przeprowadzić dodatkowe kontrole w czasie działania, jeśli Usługi Google Play dla AR są nieaktualne lub zostały odinstalowane ręcznie.
Aplikacja z opcjonalną rzeczywistością rozszerzoną używa ARCore do rozszerzenia dotychczasowych funkcji. Zawiera opcjonalne funkcje AR, które są aktywowane tylko na urządzeniach obsługujących ARCore, na których zainstalowano Usługi Google Play dla AR.
- Aplikacje AR opcjonalne można instalować i uruchamiać na urządzeniach, które nie obsługują ARCore.
- Gdy użytkownicy instalują aplikację z opcjonalną funkcją AR, Sklep Google Play nie automatycznie instaluje na urządzeniu Usług Google Play dla AR.
Wymagany AR | Opcjonalnie: AR | |
---|---|---|
Korzystanie z funkcji AR | Podstawowa funkcjonalność aplikacji wymaga ARCore. | ARCore rozszerza funkcjonalność aplikacji. Aplikacja może działać bez obsługi ARCore. |
Widoczność w Sklepie Play | Twoja aplikacja jest dostępna w Sklepie Play tylko na urządzeniach obsługujących ARCore. | Aplikacja jest zgodna z zwykłymi procedurami. |
Metoda instalacji Usług Google Play dla AR | Sklep Play zainstaluje Usługi Google Play dla AR razem z Twoją aplikacją. | Aplikacja używa
ArCoreApk.requestInstall()
do pobrania i zainstalowania ARCore. |
Wymagania dotyczące Androida minSdkVersion |
Android 7.0 (poziom API 24) | Android 4.4 (interfejs API na poziomie 19), ale uruchomienie dowolnej funkcji AR wymaga co najmniej Androida 7.0 (interfejs API na poziomie 24) |
Aby sprawdzić obsługę i stan instalacji ARCore, musisz użyć ArCoreApk.checkAvailability() lub ArCoreApk.checkAvailabilityAsync() .
|
||
Aby zainstalować Usługi Google Play dla AR, musisz użyć
ArCoreApk.requestInstall()
|
Aby ustawić wymaganą lub opcjonalną obsługę AR w aplikacji, zaktualizuj plik AndroidManifest.xml
, aby zawierał te wpisy:
Wymagana weryfikacja AR
<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>
Opcjonalnie: AR
<uses-permission android:name="android.permission.CAMERA" />
<!-- If your app was previously AR Required, don't forget to remove the
`<uses-feature android:name="android.hardware.camera.ar" />` entry, as
this would limit app visibility in the Google Play Store to only
ARCore supported devices. -->
<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>
Następnie zmodyfikuj build.gradle
aplikacji, aby określić minSdkVersion
o wartości co najmniej 24
:
android {
defaultConfig {
…
minSdkVersion 24
}
}
Dodaj zależności kompilacji
Aby dodać ARCore do projektu w Android Studio:
Upewnij się, że plik
build.gradle
projektu zawiera repozytorium Maven firmy Google.allprojects { repositories { google() … } }
Dodaj najnowszą bibliotekę ARCore jako zależność w pliku
build.gradle
aplikacji.dependencies { … implementation 'com.google.ar:core:1.33.0' }
Sprawdzaj czas działania
Aby mieć pewność, że funkcje AR w aplikacji działają płynnie, wykonaj te czynności w czasie działania.
Sprawdzanie, czy ARCore jest obsługiwane
Zarówno aplikacje AR wymagane, jak i aplikacje AR opcjonalne powinny używaćArCoreApk.checkAvailability()
lub ArCoreApk.checkAvailabilityAsync()
, aby określić, czy aktualne urządzenie obsługuje ARCore. Na urządzeniach, które nie obsługują ARCore, aplikacje powinny wyłączać funkcje związane z AR i ukrywać powiązane elementy interfejsu.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Enable AR-related functionality on ARCore supported devices only.
maybeEnableArButton()
…
}
fun maybeEnableArButton() {
ArCoreApk.getInstance().checkAvailabilityAsync(this) { availability ->
if (availability.isSupported) {
mArButton.visibility = View.VISIBLE
mArButton.isEnabled = true
} else { // The device is unsupported or unknown.
mArButton.visibility = View.INVISIBLE
mArButton.isEnabled = false
}
}
}
Java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Enable AR-related functionality on ARCore supported devices only.
maybeEnableArButton();
…
}
void maybeEnableArButton() {
ArCoreApk.getInstance().checkAvailabilityAsync(this, availability -> {
if (availability.isSupported()) {
mArButton.setVisibility(View.VISIBLE);
mArButton.setEnabled(true);
} else { // The device is unsupported or unknown.
mArButton.setVisibility(View.INVISIBLE);
mArButton.setEnabled(false);
}
});
}
ArCoreApk.checkAvailability()
lub ArCoreApk.checkAvailabilityAsync()
do sprawdzania obsługi ARCore zapewnia spójność.
ArCoreApk.checkAvailability()
może potrzebować zapytania do zasobów sieciowych, aby określić, czy urządzenie obsługuje ARCore. W tym czasie zwraca wartość UNKNOWN_CHECKING
. Aby zmniejszyć postrzegane opóźnienie i wyskakujące okienko, aplikacje powinny wywołać metodę ArCoreApk.checkAvailability()
raz na wczesnym etapie cyklu życia, aby zainicjować zapytanie, ignorując zwróconą wartość. Dzięki temu wynik z pamięci podręcznej będzie dostępny od razu, gdy może zostać wyświetlony element interfejsu korzystający z AR.
Sprawdzanie, czy są zainstalowane Usługi Google Play dla AR
Zarówno aplikacje wymagane, jak i opcjonalne AR muszą używać
ArCoreApk.requestInstall()
.
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.
}
…
}
Java
// requestInstall(Activity, true) will trigger 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.
}
…
}
Proś o dostęp do aparatu
Zarówno aplikacje z opcjonalną obsługą AR, jak i aplikacje z wymaganą obsługą AR muszą przed utworzeniem sesji AR uzyskać uprawnienia do korzystania z kamery.
Kotlin
override fun onResume() {
super.onResume()
// ARCore requires camera permission to operate.
if (!CameraPermissionHelper.hasCameraPermission(this)) {
CameraPermissionHelper.requestCameraPermission(this)
return
}
…
}
Java
@Override
protected void onResume() {
super.onResume();
// ARCore requires camera permission to operate.
if (!CameraPermissionHelper.hasCameraPermission(this)) {
CameraPermissionHelper.requestCameraPermission(this);
return;
}
…
}
Aktywność AR musi też implementować onRequestPermissionsResult()
.
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()
}
}
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();
}
}
Zgodność z wymaganiami dotyczącymi prywatności użytkownika
Aby opublikować aplikację w Sklepie Play, upewnij się, że jest ona zgodna z Wymagania dotyczące prywatności użytkownika.
Co dalej?
- Dowiedz się, jak skonfigurować sesję ARCore.