Yeni veya mevcut uygulamanızda artırılmış gerçeklik özelliklerini kullanmak için AR'yi etkinleştirin.
Uygulamanızı AR Zorunlu veya AR İsteğe Bağlı olacak şekilde yapılandırın
Ayrı ayrı cihazlarda yer tasarrufu sağlamak amacıyla tüm AR özellikleri, Play Store tarafından ayrı olarak güncellenen AR için Google Play Hizmetleri adlı bir uygulamada depolanır. AR özelliklerini kullanan Android uygulamaları, ARCore SDK'sını kullanarak AR için Google Play Hizmetleri ile iletişim kurar. AR özelliklerini destekleyen bir uygulama iki şekilde yapılandırılabilir: AR Zorunlu ve AR İsteğe Bağlı. Bu tanım, uygulamanın AR için Google Play Hizmetleri uygulamasıyla nasıl etkileşimde bulunduğunu belirler.
AR Gerekli uygulamalar, ARCore olmadan çalışamaz. AR için Google Play Hizmetleri'nin yüklü olduğu ARCore destekli bir cihaz gerekir.
- Google Play Store, AR'nin gerekli olduğu uygulamaları yalnızca ARCore'u destekleyen cihazlarda kullanıma sunar.
- Kullanıcılar AR için gerekli bir uygulama yüklediğinde Google Play Store, AR için Google Play Hizmetleri'ni cihazlarına otomatik olarak yükler. Ancak, AR için Google Play Hizmetleri'nin eski olması veya manuel olarak kaldırılması durumunda uygulamanızın yine de ek çalışma zamanı kontrolleri gerçekleştirmesi gerekir.
AR İsteğe Bağlı uygulamalar, mevcut işlevleri iyileştirmek için ARCore'u kullanır. Yalnızca AR için Google Play Hizmetleri'nin yüklü olduğu ARCore destekli cihazlarda etkinleştirilen isteğe bağlı AR özelliklerine sahiptir.
- AR İsteğe Bağlı uygulamaları, ARCore'u desteklemeyen cihazlara yüklenebilir ve çalıştırılabilir.
- Kullanıcılar AR için isteğe bağlı bir uygulama yüklediğinde Google Play Store, AR için Google Play Hizmetleri'ni cihaza otomatik olarak yüklemez.
Artırılmış gerçeklik (AR) gerekiyor | AR İsteğe bağlı | |
---|---|---|
Artırılmış gerçeklik (AR) özelliğinin kullanımı | Uygulamanızın temel işlevini yerine getirmesi için ARCore'u kullanmanız gerekiyor. | ARCore, uygulamanızın işlevselliğini artırır. Uygulamanız, ARCore desteği olmadan çalışabilir. |
Play Store'da görünürlük | Uygulamanız yalnızca ARCore'u destekleyen cihazlarda Play Store'da listelenir. | Uygulamanız normal giriş prosedürlerine uyuyor. |
AR için Google Play Hizmetleri yükleme yöntemi | Play Store, uygulamanızla birlikte AR için Google Play Hizmetleri'ni yükler. | Uygulamanız, ARCore'u indirmek ve yüklemek için
ArCoreApk.requestInstall()
özelliğini kullanıyor. |
Android minSdkVersion gereksinimleri |
Android 7.0 (API Düzeyi 24) | Android 4.4 (API Düzeyi 19) olsa da tüm AR işlevlerini çalıştırmak için en az Android 7.0 (API Düzeyi 24) gerekir. |
ARCore desteğini ve yükleme durumunu kontrol etmek için ArCoreApk.checkAvailability() veya ArCoreApk.checkAvailabilityAsync() kullanılmalıdır
|
||
AR için Google Play Hizmetleri'ni yüklemek için
ArCoreApk.requestInstall()
kullanılmalıdır |
Uygulamanızı AR Zorunlu veya AR İsteğe Bağlı hale getirmek için AndroidManifest.xml
öğenizi aşağıdaki girişleri içerecek şekilde güncelleyin:
AR Zorunlu
<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>
Artırılmış gerçeklik (AR) isteğe bağlı
<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>
Ardından, uygulamanızın build.gradle
özelliğini en az 24
tutarında bir minSdkVersion
belirtecek şekilde değiştirin:
android {
defaultConfig {
…
minSdkVersion 24
}
}
Derleme bağımlılıkları ekleme
Android Studio projenize ARCore'u eklemek için aşağıdakileri yapın:
Projenizin
build.gradle
dosyasının, Google'ın Maven deposunu içerdiğinden emin olun.allprojects { repositories { google() … } }
En son ARCore kitaplığını, uygulamanızın
build.gradle
dosyasına bağımlılık olarak ekleyin.dependencies { … implementation 'com.google.ar:core:1.33.0' }
Çalışma zamanı denetimleri gerçekleştirme
Uygulamanızdaki artırılmış gerçeklik özelliklerinin sorunsuz çalışmasını sağlamak için çalışma zamanı sırasında aşağıdaki işlemleri yapın.
ARCore'un desteklenip desteklenmediğini kontrol etme
Mevcut cihazın ARCore'u destekleyip desteklemediğini belirlemek için hem AR Gerekli hem de AR İsteğe Bağlı uygulamalarArCoreApk.checkAvailability()
veya ArCoreApk.checkAvailabilityAsync()
kullanmalıdır. ARCore'u desteklemeyen cihazlarda uygulamalar, AR ile ilgili işlevleri devre dışı bırakmalı ve ilişkili kullanıcı arayüzü öğelerini gizlemelidir.
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()
veya ArCoreApk.checkAvailabilityAsync()
aracını kullanmak tutarlı bir deneyim sağlar.
ArCoreApk.checkAvailability()
'ın, cihazın ARCore'u destekleyip desteklemediğini belirlemek için ağ kaynaklarını sorgulaması gerekebilir. Bu süre zarfında UNKNOWN_CHECKING
değerini döndürecektir. Algılanan gecikmeyi ve pop-up'ı azaltmak için uygulamalar, döndürülen değeri yok sayarak sorguyu başlatmak üzere yaşam döngüsünün başında ArCoreApk.checkAvailability()
işlevini çağırmalıdır. Bu şekilde, AR girişi yapan bir kullanıcı arayüzü öğesi görüntülendiğinde önbelleğe alınmış sonuç hemen kullanılabilir.
AR için Google Play Hizmetleri'nin yüklü olup olmadığını kontrol etme
Hem AR'nin Zorunlu Olduğu hem de AR'nin İsteğe Bağlı Olduğu uygulamalar, AR için Google Play Hizmetleri'nin uyumlu bir sürümünün (hala) yüklü olup olmadığını kontrol etmek ve gerekli tüm ARCore cihaz profili verilerinin indirildiğinden emin olmak için ARCore oturumu oluşturmadan önce
ArCoreApk.requestInstall()
kullanmalıdır.
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.
}
…
}
Kamera izni isteme
Hem AR isteğe bağlı hem de AR zorunlu uygulamalar, AR oturumu oluşturmadan önce kamera izninin verildiğinden emin olmalıdır.
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;
}
…
}
AR etkinliğinizde onRequestPermissionsResult()
politikası da uygulanmalıdır.
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();
}
}
Kullanıcı Gizliliği Şartlarını Yerine Getirme
Uygulamanızı Play Store'da yayınlamak için ARCore'un Kullanıcı Gizliliği Şartları'na uyduğundan emin olun.