Все более старые методы ответов устарели в Google (предположительно из-за подобных проблем), поскольку для API 21 вам необходимо использовать API камеры 2:
Этот класс устарел на уровне API 21. Мы рекомендуем использовать новый
android.hardware.camera2 API для новых приложений.
В более новом API у вас есть почти полная мощность над камерой устройства Android и документация явно указывает на
String[] getCameraIdList()
и затем используйте полученный CameraId, чтобы открыть камеру:
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
99% фронтальных камер имеют id = "1", а id задней камеры = "0"
в соответствии с этим:
Несъемные камеры используют целые числа, начинающиеся с 0 для их
идентификаторы, в то время как съемные камеры имеют уникальный идентификатор для каждого
отдельные устройства, даже если они одной модели.
Однако , это означает, что если ситуация с устройством является редкой, например, с планшетом с 1-фронтальной камерой, вам нужно посчитать, сколько встроенных камер у вас есть, и разместить заказ камеры. по значимости («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"