Включите Geospatial API для вашего приложения Android NDK (C)

Настройте параметры своего приложения так, чтобы оно могло использовать Geospatial API .

Предварительные условия

Прежде чем продолжить, убедитесь, что вы понимаете фундаментальные концепции AR и то, как настроить сеанс ARCore .

Если вы хотите запустить пример приложения, демонстрирующий описанную здесь функциональность, см. Краткое руководство ARCore Geospatial для Android для Java. Пример приложения в кратком руководстве написан на Java. Примеры кода в этом документе предназначены для той же функциональности, написанной на C.

Дополнительную информацию о Geospatial API см. в разделе «Введение в Geospatial API».

Если вы новичок в разработке с помощью ARCore, см. раздел «Начало работы» для получения информации о требованиях к программному и аппаратному обеспечению, предварительных требованиях и другой информации, специфичной для используемых вами платформ.

Убедитесь, что ваша среда разработки соответствует требованиям ARCore SDK, как описано в Кратком руководстве по Java.

Включите API ARCore

Прежде чем использовать систему визуального позиционирования (VPS) в своем приложении, вы должны сначала включить API ARCore в новом или существующем проекте Google Cloud. Эта служба отвечает за размещение, хранение и разрешение геопространственных привязок.

Предпочтительна авторизация без ключа, но также поддерживается авторизация по ключу API.

Добавьте необходимые библиотеки в ваше приложение

После авторизации вашего приложения для вызова API ARCore вы должны добавить библиотеки, чтобы включить геопространственные функции в вашем приложении.

В файле 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 , приложению разрешено получать географическую информацию из системы визуального позиционирования (VPS).

Запросить пользователя разрешить использование данных устройства

Приложения, использующие ARCore Geospatial API, должны предоставить пользователю запрос на подтверждение и разрешение использования данных со своего устройства. Дополнительную информацию см. в разделе «Требования к конфиденциальности пользователей» .

Проверьте совместимость устройства

Не все устройства, поддерживающие ARCore, также поддерживают Geospatial API, как описано в кратком руководстве по Java.

Чтобы проверить устройство пользователя на совместимость, вызовите ArSession_isGeospatialModeSupported() . Если это возвращает false, не пытайтесь настроить сеанс (ниже), так как это приведет к тому, что ArStatus сообщит об AR_ERROR_UNSUPPORTED_CONFIGURATION .

Запросить у пользователя разрешения на определение местоположения во время выполнения

Ваше приложение должно запрашивать разрешения на определение местоположения во время выполнения .

Чтобы использовать ARCore Geospatial API, вашему приложению необходимо зарегистрировать следующие дополнительные разрешения:

  • ACCESS_FINE_LOCATION для точного определения местоположения пользователя.

  • ACCESS_COARSE_LOCATION для неточного определения местоположения пользователя и соблюдения требований конфиденциальности пользователя. Однако Geospatial API нельзя настроить для работы с приблизительным местоположением, и запросы API не будут выполняться, если пользователь установил это разрешение. Смотрите ниже для получения дополнительной информации.

  • ACCESS_INTERNET для связи со службой геопространственного API ARCore.

<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 , как показано выше. Вы должны настроить оба разрешения на определение местоположения .

Однако когда пользователи указывают приблизительное местоположение, это не позволяет Geospatial API получить точное местоположение, которое ему требуется. Геопространственный сервис не позволит настроить себя, если ваше приложение предоставляет ему только приблизительное местоположение. Ваше приложение не может использовать Geospatial API с приблизительным местоположением.

Проверьте доступность геопространственных данных в текущем местоположении устройства.

Поскольку Geospatial API использует комбинацию VPS и GPS для определения геопространственной позы, API можно использовать до тех пор, пока устройство может определить свое местоположение. В районах с низкой точностью GPS, таких как закрытые помещения и плотная городская среда, API будет полагаться на покрытие VPS для создания поз с высокой точностью. Ожидается, что в типичных условиях VPS обеспечит точность позиционирования около 5 метров и точность вращения 5 градусов. Используйте ArSession_checkVpsAvailabilityAsync() , чтобы определить, имеет ли данное местоположение покрытие VPS.

Geospatial API также можно использовать в регионах, где нет покрытия VPS. На открытом воздухе с небольшим количеством препятствий или без них GPS может быть достаточно для определения позы с высокой точностью.

Что дальше