ARCore 활성화

이 페이지에서는 Android Studio 프로젝트에서 ARCore 기능을 활성화하는 방법을 설명합니다. 이렇게 하려면 다음을 수행해야 합니다.

  1. 앱에 대해 AR 필수 및 AR 선택 중에서 선택
  2. 앱의 매니페스트에 AR 필수 항목 또는 AR 선택 항목 추가
  3. 빌드 의존성을 추가 프로젝트에
  4. 런타임 검사 수행 을 보장하기를 :
    • 장치는 ARCore 지원 ,
    • AR용 Google Play 서비스가 설치되어 있습니다.
    • 카메라 권한이 부여되었습니다.
  5. 확인이 ARCore의와 앱을 준수 사용자의 개인 정보 보호 요구 사항

AR 필수 또는 AR 선택 중 선택

AR 필수AR 옵션 : 지원하는 기능을 AR 앱은 두 가지 방법으로 구성 할 수 있습니다.

아칸소 필수 응용 프로그램은 ARCore없이 작동 할 수 없습니다. 사용할 수하기 위해, AR 필수 응용 프로그램은 필요 ARCore 지원 장치AR 구글 플레이 서비스 가 설치합니다.

  • 구글 플레이 스토어 AR 필수에서만 사용할 수 애플 리케이션하게 지원 ARCore하는 장치 .

  • 사용자가 AR 필수 응용 프로그램을 설치하면 Google Play 스토어가 자동으로 설치 플레이 AR 구글 플레이 서비스 . 그러나 앱은 여전히 추가로 수행해야 런타임 검사를 업데이트해야 AR을위한 경우 구글 플레이 서비스 또는 수동으로 제거되었습니다.

아칸소 선택적 응용 프로그램에서 사용하는 다른 기능을 증가시키기 위해 ARCore. 아칸소 선택적 응용 프로그램에서만 활성화되는 옵션 AR 기능이 ARCore 디바이스 지원AR 구글 플레이 서비스를 설치합니다.

  • AR 옵션 앱은 ARCore를 지원하지 않는 기기에 설치하여 실행할 수 있습니다.

  • 사용자가 AR 선택적 응용 프로그램을 설치하면 구글 플레이 스토어가 자동으로 설치되지 않습니다 AR 구글 플레이 서비스 응용 프로그램과 함께.

AR 필수 AR 옵션
AR 기능 사용 앱은 기본 기능을 위해 ARCore가 필요합니다. ARCore는 앱의 기능을 강화합니다. 앱은 ARCore 지원 없이 실행할 수 있습니다.
Play 스토어 가시성 앱은 ARCore를 지원하는 기기의 Play 스토어에만 나열됩니다. 앱은 다음과 정상 리스팅 절차를 .
AR에 대한 구글 플레이 서비스 설치 방법 Play 스토어는 앱과 함께 AR용 Google Play 서비스를 설치합니다. 앱의 용도는 ArCoreApk.requestInstall() 다운로드하고 ARCore를 설치합니다.
안드로이드 minSdkVersion 요구 사항 안드로이드 7.0(API 레벨 24) 안드로이드 4.0(API 레벨 14)
사용해야합니다 ArCoreApk.checkAvailability() ARCore 지원을 확인하고 상태를 설치합니다
사용해야합니다 ArCoreApk.requestInstall() AR 구글 플레이 서비스를 설치하려면

자세한 내용은 구글 플레이 스토어에서 출판 AR 애플 리케이션 .

앱의 매니페스트에 항목 추가

당신의 수정 AndroidManifest.xml 다음과 같은 항목을 포함 :

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>

AR 옵션

<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 앱에 build.gradle :

AR 필수

android {
    defaultConfig {
        …
        minSdkVersion 24
    }
}

AR 옵션

android {
    defaultConfig {
        …
        minSdkVersion 14
    }
}

빌드 종속성 추가

Android Studio 프로젝트에 ARCore를 추가하려면 다음 단계를 수행하십시오.

  • 확인 프로젝트의 build.gradle 파일은 구글의 메이븐 저장소를 포함합니다 :

    allprojects {
        repositories {
            google()
            …
        }
    }
    
  • 앱에서 종속성으로 최신 ARCore 라이브러리를 추가 build.gradle 파일 :

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

런타임 검사 수행

ARCore 지원 여부 확인

모두 AR 필수AR 옵션 애플 리케이션을 사용해야합니다 ArCoreApk.checkAvailability() 현재 장치가 지원 ARCore 지 확인하십시오. ARCore를 지원하지 않는 기기에서 앱은 AR 관련 기능을 비활성화하고 관련 UI 요소를 숨겨야 합니다.

자바

@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);
  }
}

코틀린

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
  }
}

AR용 Google Play 서비스는 AR 필수 앱과 함께 설치되지만 지원되지 않는 장치를 사용하는 사용자는 외부 소스에서 설치할 수 있습니다. 사용 checkAvailability() ARCore 지원을 확인하는 것은 일관된 환경을 보장합니다.

checkAvailability() 디바이스가 지원하는 ARCore 여부를 결정하기 위해 쿼리 네트워크 리소스에해야 할 수도 있습니다. 이 기간 동안, 그것은 반환 UNKNOWN_CHECKING . 인식 대기 시간을 줄이고 팝업에서하려면 응용 프로그램 호출한다 checkAvailability() 반환 값을 무시하고, 쿼리를 시작 한 번 초기 라이프 사이클이다. 때이 방법 캐시 된 결과는 즉시 사용할 수 maybeEnableArButton() 호출된다.

카메라 권한 요청

AR 옵션AR 필요한 두 애플리케이션은 카메라 권한이 AR 세션을 만들기 전에이 부여 된 것을 확인해야합니다. hello_ar_java 샘플은 포함 CameraPermissionHelper 당신의 AR 활동의에서 프로젝트에 복사하고 호출 할 수있는 클래스 onResume() 메소드를 :

자바

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

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

  …
}

코틀린

override fun onResume() {
  super.onResume()

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

  …
}

귀하의 AR 활동도 구현해야합니다 onRequestPermissionsResult() 에서와 같이, HelloArActivity :

자바

@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();
  }
}

코틀린

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()
  }
}

AR용 Google Play 서비스 설치 여부 확인

AR에 대한 구글 플레이 서비스의 호환 버전 (여전히) 여부를 확인 설치 및 필요한 모든 ARCore 장치 프로파일 데이터가 다운로드되었는지 확인하려면 두 AR 필수 및 AR 옵션 애플 리케이션을 호출해야 ArCoreApk.requestInstall() ARCore를 작성하기 전에 세션. 이렇게 하면 사용자에게 필요한 경우 ARCore를 설치하거나 업데이트하라는 메시지가 표시되고 필요한 ARCore 장치 프로필 데이터가 다운로드됩니다.

자바

// 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.
  }
  …
}

코틀린

// 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.
  }
  …
}

사용자 개인 정보 요구 사항 준수

ARCore의로 확인 앱을 준수합니다 사용자의 개인 정보 보호 요구 사항 .

다음 단계