0

我正在使用 sceneform 在 Android Studio 中创建一个 AR 应用程序。在受支持的设备上一切正常。但是,在不受支持的设备上,我希望应用程序的用户可以在没有增强现实功能的情况下交替查看 3d 对象/模型,如 Google expeditions Expeditions App 中的。我怎样才能做到这一点?

4

1 回答 1

0

对此的解决方案可能并不简单,可能需要两个并排的应用程序。我将对我的想法给出一个高层次的看法。很高兴看到你现在拥有什么,发布你拥有的 git repo 链接。但我假设您的代码中有一个 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();
    }
  }

在这里,您可以恢复为非 AR 解决方案。问题是,通常这一点为时已晚,无法恢复到不受支持的设备的兼容视图。如果您查看您的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 商店系统提取,它自动不会为不兼容的设备提供该应用程序。这里有两种方法可以吸引您:

  1. 删除上面引用的 Android 清单条目,但随后您必须测试代码中的兼容性。在这种情况下,您将向 ActivityFrame 布局添加另一个片段,这将是兼容性视图。放置功能测试代码并将查看器传送到正确的片段(AR 设备的 AR 片段,不兼容的 3D)。
  2. 您开发了两个应用程序。一种是 3D 兼容的,这是日常用户会开始的。此应用程序还将包含与前一个选项类似的功能测试代码,但这将启动一个(Android Instant 应用程序)[ https://www.raywenderlich.com/9519-instant-apps-getting-started],一旦检测到 AR 特征。这可以提供无缝过渡,一旦启动,兼容 AR 的设备就可以继续使用该 AR 应用程序。由于会有两个单独的应用程序,我会尝试将通用代码库保存在一个库中并在两个应用程序之间共享它以避免代码重复。

免责声明:这些是概念,我从未尝试过生成 AR Core 即时应用程序。

于 2020-04-01T00:05:30.150 回答