Соавтор: Алиреза Эйдзи

Мобильные приложения всегда были местом для выполнения обычных задач, таких как отправка текстовых сообщений другим людям и добавление элемента в список напоминаний; но в настоящее время, благодаря огромной мощности смартфонов, разработчики могут расширить границы своего приложения до реальности.

Что такое дополненная реальность?

Основная цель дополненной реальности (как вы видите из ее названия) — добавить смоделированные компьютером объекты в реальный мир с использованием камер и датчиков. Ваш мобильный телефон получает информацию из внешнего мира, обрабатывает ее, добавляет в нее объекты, которые вы хотите добавить, и показывает пользователю изображение в реальном времени из внешнего мира, но с некоторыми добавленными к нему объектами.

Покажите мне несколько примеров, пожалуйста

AR проникла во многие отрасли, и все больше и больше разработчиков открывают для себя ее возможности и используют во многих приложениях. Карты Google являются одним из них. Представьте, что вы ищете близлежащее кафе, которое вы нашли на Картах Google, но, поскольку вы идете по трехмерному миру и видите направления на двухмерном экране, запутаться довольно часто. Карты Google предложили решение этой проблемы с дополненной реальностью. Он может направить вас в нужное место, добавляя указатели направления в реальный мир, и вам никогда не придется беспокоиться о том, что вы заблудитесь. Посмотрите на гифку ниже.

Вы говорите мне, что я должен создать свое AR-приложение с нуля?

Конечно, нет. Технологические компании выпускают несколько хороших SDK для разработчиков. Поскольку ОС Android принадлежит Google, давайте посмотрим на ее AR SDK под названием ARCore. ARCore представляет себя следующим образом:

ARCore — это платформа Google для создания дополненной реальности. Используя различные API, ARCore позволяет вашему телефону ощущать окружающую среду, понимать мир и взаимодействовать с информацией. Некоторые из API-интерфейсов доступны для Android и iOS, чтобы обеспечить совместное использование дополненной реальности.

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

Отслеживание движения позволяет телефону понимать и отслеживать свое положение относительно мира.

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

Оценка освещения позволяет телефону оценить текущие условия освещения окружающей среды.

Вы можете использовать этот SDK не только для разработки на платформе Android, но и на других платформах, таких как iOS, Web и Unity.

ARCore, как и другие инструменты AR, использует вход камеры и объединяет его с инерционными датчиками телефона, чтобы определить как положение, так и ориентацию телефона при его перемещении в пространстве. Он определяет ключевые точки и запоминает их, поэтому, когда вы возвращаете свой телефон в эту конкретную точку, он может снова отобразить объект в этом месте. Он также может обнаруживать плоские поверхности, чтобы размещать на них предметы.

Интересный. Теперь, как я могу создать свое приложение AR с помощью ARCore?

В этом тексте мы собираемся объяснить ARCore с использованием Java на Android. Но вы также можете увидеть его реализации на веб-сайте ARCore.

предпосылки

  • Средство разработки: Android Studio
  • Базовое понимание разработки на Java и Android

Включение ARCore в вашем проекте

Прежде всего, вы должны определить, хотите ли вы, чтобы ваше приложение было определено как «Требуется AR» или «Необязательный AR». Вот список различий между этими двумя типами приложений.

Добавьте записи в файл Manifest.xml.

для простоты предположим, что наше приложение будет опциональным с дополненной реальностью. Поэтому следующие коды предназначены для написания дополнительного приложения AR.

Добавьте следующие записи в файл Manifest.xml.

<uses-permission android:name="android.permission.CAMERA" />

<application …>
  

 <meta-data android:name="com.google.ar.core" android:value="optional" />
</application>

Кроме того, не забудьте установить для minSdkVersion значение 14 в файле build.gradle, так как мы идем по пути AR Optional.

android {
    defaultConfig {
        …
        minSdkVersion 14
    }
}

Конечно, вам нужно добавить зависимости

Убедитесь, что ваш build.gradle содержит репозиторий Google Maven.

allprojects {
    repositories {
        google()
        …
    }
}

и добавьте эту зависимость, чтобы получить ARCore SDK.

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

Как узнать, поддерживается ли ARCore во время выполнения?

Добавьте следующий фрагмент в свой метод onCreate() в ARActivity, чтобы узнать доступность.

@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
protected void onResume() {
  super.onResume();

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

  …
}

В вашем приложении также должен быть реализован следующий метод.

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

И последнее, но не менее важное: проверьте, установлены ли сервисы Google Play для AR.

Добавьте следующий фрагмент в метод onResume().

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

Получите образец проекта и запустите его.

Скопируйте следующий URL-адрес из официального репозитория ARCore.

git clone https://github.com/google-ar/arcore-android-sdk.git

Посмотрите на этих милых андроидов, плавающих на столе. Итак, каков следующий шаг для вас в мире дополненной реальности? Идите и поиграйте с примером кода. Посмотрите официальную документацию Google. Теперь, когда вы увидели свое первое приложение AR, давайте посмотрим на другие SDK и на то, следует ли вам их использовать или ARCore хорош.