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