Все более старые методы ответов устарели Google (предположительно из-за подобных проблем), поскольку API 21 вам необходимо использовать API камеры 2:
Этот класс объявлен устаревшим на уровне API 21. Мы рекомендуем использовать новый API android.hardware.camera2 для новых приложений.
В новом API у вас есть почти полная власть над камерой Android-устройства, а документация содержит явные советы
String[] getCameraIdList()
а затем используйте полученный CameraId, чтобы открыть камеру:
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
99% фронтальных камер имеют id = "1", а задние камеры id = "0" в
соответствии с этим:
В несъемных камерах в качестве идентификаторов используются целые числа, начинающиеся с 0, в то время как съемные камеры имеют уникальный идентификатор для каждого отдельного устройства, даже если они одной модели.
Однако это означает, что если ситуация с устройством встречается редко, например, только планшет с одной фронтальной камерой, вам нужно подсчитать, сколько у вас встроенных камер, и расположить камеры в порядке их важности («0»). Итак, CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0, что означает, что задняя камера важнее фронтальной.
Я не знаю единого метода определения фронтальной камеры на всех устройствах Android. Проще говоря, ОС Android внутри устройства не может точно определить, где именно находится камера, по некоторым причинам: возможно, единственный жестко запрограммированный идентификатор камеры - это целое число, представляющее ее важность, или, может быть, на некоторых устройствах, в какую бы сторону вы ни повернулись ... " назад ».
Документация : https://developer.android.com/reference/android/hardware/camera2/package-summary.html
Явные примеры : https://github.com/googlesamples/android-Camera2Basic
Для более старого API (не рекомендуется, потому что он не будет работать на современных телефонах с более новой версией Android, и перенос является головной болью). Просто используйте тот же Integer CameraID (1), чтобы открыть фронтальную камеру, как в этом ответе :
cam = Camera.open(1)
Если вы доверяете OpenCV делать часть камеры:
Внутри
<org.opencv.android.JavaCameraView
../>
для фронтальной камеры используйте следующее:
opencv:camera_id="1"