Android NDK 앱에 Geospatial API 사용 설정 (C)

Geospatial API를 사용할 수 있도록 앱 설정을 구성합니다.

기본 요건

계속 진행하기 전에 기본 AR 개념ARCore 세션 구성 방법을 이해해야 합니다.

여기에 설명된 기능을 보여주는 샘플 앱을 실행하려면 Java용 Android용 ARCore 지리정보 빠른 시작을 참고하세요. 빠른 시작의 샘플 앱은 자바로 작성되었습니다. 이 문서의 코드 샘플은 C로 작성된 것과 동일한 기능을 위한 것입니다.

Geospatial API에 대한 자세한 내용은 Geospatial API 소개를 참고하세요.

ARCore로 처음 개발하는 경우에는 시작하기에서 사용 중인 플랫폼과 관련된 소프트웨어 및 하드웨어 요구사항, 기본 요건, 기타 정보에 관한 정보를 확인하세요.

Java용 빠른 시작에 설명된 대로 개발 환경이 ARCore SDK 요구사항을 충족하는지 확인하세요.

ARCore API 사용 설정

앱에서 VPS (Visual Positioning System)를 사용하기 전에 먼저 신규 또는 기존 Google Cloud 프로젝트에서 ARCore API를 사용 설정해야 합니다. 이 서비스는 지리정보 앵커를 호스팅, 저장, 확인하는 역할을 합니다.

키 없는 승인이 선호되지만 API 키 승인도 지원됩니다.

앱에 필수 라이브러리 추가

앱이 ARCore API를 호출하도록 승인한 후에는 앱에서 지리정보 기능을 사용 설정하는 라이브러리를 추가해야 합니다.

앱의 build.gradle 파일에서 Play 서비스 위치 라이브러리를 포함하도록 Google Play 서비스를 설정합니다.

dependencies {
  // Apps must declare play-services-location version >= 16.
  // In the following line, substitute `16 (or later)` with the latest version.
  implementation 'com.google.android.gms:play-services-location:16 (or later)'
}

세션 구성에서 지리정보 기능 사용 설정

세션을 만들기 전에 세션 구성의 GeospatialModeENABLED로 변경합니다.

// Create a session config.
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);

// Enable the Geospatial API.
ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Release config resources.
ArConfig_destroy(ar_config);

지리정보 모드가 ENABLED로 설정되어 있는 동안 애플리케이션은 시각적 위치 확인 시스템 (VPS)에서 지리 정보를 가져올 수 있습니다.

사용자에게 기기 데이터 사용을 허용하라는 메시지 표시

ARCore Geospatial API를 사용하는 앱은 확인 및 기기 데이터 사용을 허용하라는 메시지를 사용자에게 표시해야 합니다. 자세한 내용은 사용자 개인 정보 보호 요구사항을 참고하세요.

기기 호환성 확인하기

Java용 quickstart에 설명된 대로 ARCore를 지원하는 모든 기기가 Geospatial API를 지원하는 것은 아닙니다.

사용자 기기의 호환성을 확인하려면 ArSession_isGeospatialModeSupported()를 호출합니다. false가 반환되면 세션 (아래)을 구성하려고 시도하지 마세요. 그렇게 하면 ArStatus에서 AR_ERROR_UNSUPPORTED_CONFIGURATION를 보고하게 됩니다.

런타임 시 사용자에게 위치 정보 액세스 권한 요청

앱에서 런타임 시 위치 정보 액세스 권한을 요청해야 합니다.

ARCore Geospatial API를 사용하려면 앱에서 다음과 같은 추가 권한을 등록해야 합니다.

  • ACCESS_FINE_LOCATION: 사용자의 위치를 정확하게 파악합니다.

  • ACCESS_COARSE_LOCATION: 사용자의 위치를 부정확하게 판단하고 사용자 개인 정보 보호 요구사항을 준수합니다. 그러나 Geospatial API는 대략적인 위치와 작동하도록 구성할 수 없으며 사용자가 이 권한을 설정하면 API 요청이 실패합니다. 자세한 정보는 아래를 참고하세요.

  • ACCESS_INTERNET: ARCore Geospatial API 서비스에 문의합니다.

<manifest ... >
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.INTERNET" />
</manifest>

Android 버전 12 이상을 실행하는 기기에서는 앱이 대략적인 위치 정보에만 액세스하도록 사용자가 요청할 수 있습니다. 이 요청을 수용하려면 앱에 위와 같이 ACCESS_FINE_LOCATION와 함께 ACCESS_COARSE_LOCATION 권한이 구성되어 있어야 합니다. 두 위치 정보 액세스 권한을 모두 구성해야 합니다.

그러나 사용자가 대략적인 위치를 지정하면 Geospatial API에서 필요한 정확한 위치를 가져올 수 없습니다. 지리정보 서비스는 앱에서 대략적인 위치만 제공하는 경우 자체 구성을 허용하지 않습니다. 앱은 대략적 위치와 함께 Geospatial API를 사용할 수 없습니다.

기기 현재 위치의 지리정보 가용성 확인

Geospatial API는 VPS와 GPS의 조합을 사용하여 Geospatial 포즈를 결정하므로 기기가 위치를 파악할 수 있는 한 API를 사용할 수 있습니다. 실내 공간 및 밀집된 도시 환경과 같이 GPS 정확도가 낮은 영역에서 API는 VPS 범위를 사용하여 높은 정확도 포즈를 생성합니다. 일반적인 조건에서 VPS는 약 5미터의 위치 정확도와 5도의 회전 정확도를 제공할 것으로 예상됩니다. ArSession_checkVpsAvailabilityAsync()를 사용하여 지정된 위치에 VPS 서비스 지역을 적용할 수 있는지 확인합니다.

Geospatial API는 VPS 커버리지가 없는 영역에서도 사용할 수 있습니다. 오버헤드가 거의 없거나 전혀 없는 야외 환경에서는 GPS만으로도 높은 정확도로 포즈를 취할 수 있습니다.

다음 단계