Использование пакета SDK для сцены в студии Android для создания действия средства трехмерного просмотра на неподдерживаемых устройствах

Я использую сцену для создания приложения AR в Android Studio. На поддерживаемых устройствах все работает как положено. Однако на неподдерживаемых устройствах я хочу, чтобы пользователь приложения альтернативно просматривал трехмерный объект / модель без функции дополненной реальности, как в приложении Google Expeditions Expeditions. Как я могу этого добиться?

1 ответ

Решение этой проблемы может быть непростым и может потребовать наличия двух параллельных приложений. Я дам общее представление о том, что я думаю. Было бы хорошо увидеть, что у вас есть прямо сейчас, опубликуйте ссылку на репозиторий git, которая у вас есть. Но я предполагаю, что где-то в вашем коде есть фрагмент представления AR. Этот фрагмент содержит некоторую проверку совместимости, например:

  @Override
  public void onAttach(Context context) {
    super.onAttach(context);

    // Check for Sceneform being supported on this device.  This check will be integrated into
    // Sceneform eventually.
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
      Log.e(TAG, "Sceneform requires Android N or later");
      Snackbar.make(getActivity().findViewById(android.R.id.content),
              "Sceneform requires Android N or later",
              Snackbar.LENGTH_LONG).setAction("Action", null).show();
    }

    String openGlVersionString =
        ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE))
            .getDeviceConfigurationInfo()
            .getGlEsVersion();
    if (Double.parseDouble(openGlVersionString) < MIN_OPENGL_VERSION) {
      Log.e(TAG, "Sceneform requires OpenGL ES 3.0 or later");
      Snackbar.make(getActivity().findViewById(android.R.id.content),
              "Sceneform requires OpenGL ES 3.0 or later",
              Snackbar.LENGTH_LONG).setAction("Action", null).show();
    }
  }

Здесь вы можете вернуться к решению без дополненной реальности. Проблема в том, что обычно это слишком поздно, чтобы вернуться к совместимому представлению для неподдерживаемых устройств. Если вы посмотрите на свойAndroidManifest.xml, вы увидите две записи, относящиеся к AR:

<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>

а также

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

Эти две записи выбираются системой Google Play Store, и она автоматически не предлагает приложение для несовместимых устройств. Здесь есть два пути, к которым вы можете стремиться:

  1. Удалите указанные выше записи манифеста Android, но затем вы должны проверить совместимость в коде. В этом случае вы должны добавить еще один фрагмент в макет ActivityFrame, это будет представление совместимости. Поместите коды проверки функций и переместите зрителя к нужному фрагменту (фрагмент AR для устройств AR, 3D для несовместимых).
  2. Вы разрабатываете два приложения. Один из них совместим с 3D, это то, что начал бы обычный пользователь. Это приложение также будет содержать код тестирования функций, аналогичный предыдущему варианту, но при этом запустится (приложение Android Instant)[https://www.raywenderlich.com/9519-instant-apps-getting-started], которое поддерживает ARCore после Обнаружены функции AR. Это может обеспечить плавный переход, и после его запуска устройства, совместимые с AR, могут остаться с этим приложением AR. Поскольку будет два отдельных приложения, я бы попытался сохранить общую базу кода в библиотеке и делиться ею между двумя приложениями, чтобы избежать дублирования кода.

Отказ от ответственности: это концепции, и я никогда не пытался создать мгновенное приложение AR Core.

Другие вопросы по тегам