Android NDK アプリで Geospatial API を有効にする(C)

Geospatial API を使用できるように、アプリの設定を構成します。

前提条件

AR の基礎的なコンセプトを理解しておいてください。 と ARCore セッションを構成する方法を確認してください。

ここで説明する機能を示すサンプルアプリを実行する場合は、Java の ARCore Geospatial のクイックスタートをご覧ください。クイックスタートのサンプルアプリは Java で記述されています。コードサンプル C で記述されたものと同じ機能に関するものです。

Geospatial API の詳細については、Geospatial API の概要をご覧ください。

ARCore を使った開発を初めて行う場合は、スタートガイドをご覧ください。 でソフトウェアとハードウェアの要件、前提条件、 使用しているプラットフォームに固有のその他の情報

Java のクイックスタートで説明されているように、開発環境が ARCore SDK の要件を満たしていることを確認します。

ARCore API を有効にする

アプリで Visual Positioning System(VPS)を使用する前に、新しい Google Cloud プロジェクトまたは既存の Google Cloud プロジェクトで ARCore API を有効にする必要があります。このサービスは 地理空間アンカーのホスティング、保存、解決です。

キーレス認証が推奨されますが、API キー認証もサポートされています。

必要なライブラリをアプリに追加する

ARCore API を呼び出すようにアプリを承認したら、ライブラリを追加してアプリで地理空間機能を有効にする必要があります。

アプリの build.gradle ファイルで、Google Play 開発者サービスを設定して、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)'
}

セッション構成でジオ空間機能を有効にする

セッションを作成する前に、セッションの GeospatialMode を変更します。 ENABLED に変更します。

// 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 に設定されている間、アプリケーションは Visual Positioning System(VPS)から地理情報を取得できます。

デバイスデータの使用を許可するようユーザーに求める

ARCore Geospatial API を使用するアプリは、ユーザーに以下のプロンプトを表示する必要があります。 デバイスのデータの使用を承認し、許可します。詳しくは、 ユーザーのプライバシー要件 情報です。

デバイスの互換性を確認する

Java のクイックスタートで説明されているように、ARCore をサポートするすべてのデバイスが Geospatial API をサポートしているわけではありません。

ユーザーのデバイスの互換性を確認するには、 ArSession_isGeospatialModeSupported()。 false が返された場合は、次に示すように、セッションの構成を試行しないでください。 ArStatus がエラーを AR_ERROR_UNSUPPORTED_CONFIGURATION

実行時にユーザーに位置情報の利用許可をリクエストする

アプリは実行時に位置情報の利用許可をリクエストする必要があります。

ARCore Geospatial API を使用するには、アプリで次の追加の権限を登録する必要があります。

  • ACCESS_FINE_LOCATION ユーザーの現在地を正確に特定します。

  • ACCESS_COARSE_LOCATION ユーザーの位置情報を正確に特定できない場合や、ユーザーのプライバシー要件を遵守する場合。ただし、Geospatial API を 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_COARSE_LOCATION 設定済みの権限とともに ACCESS_FINE_LOCATION, 渡されます。両方の位置情報の権限を構成する必要があります。

ただし、ユーザーがおおまかな位置情報を指定すると、 API が正確な位置情報を取得できないようにします。地理空間サービスは おおよその位置情報のみを提供するアプリは、それ自体を構成できません。 アプリで Geospatial API を粗い位置情報で使用することはできません。

デバイスの現在地での地理空間の利用状況を確認する

Geospatial API は VPS と GPS を組み合わせて地理空間のポーズを判断するため、デバイスが位置情報を特定できる限り、API を使用できます。屋内空間や人口密集地など、GPS の精度が低い地域では、API は VPS のカバレッジに依存して高精度の姿勢を生成します。一般的な条件下で、VPS の位置精度は約 5 メートル、回転精度は 5 度であると期待できます。ArSession_checkVpsAvailabilityAsync() を使用して、特定の場所が VPS の対象かどうかを判断します。

Geospatial API は、VPS がカバーしていない地域でも使用できます。屋外で上部に遮蔽物がほとんどない環境では、GPS だけでも高い精度でポーズを生成できる場合があります。

次のステップ