Усі старіші методи відповідей застаріли Google (нібито через подібні проблеми), оскільки API 21 вам потрібно використовувати API Camera 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, для своїх ідентифікаторів, тоді як знімні камери мають унікальний ідентифікатор для кожного окремого пристрою, навіть якщо вони однакові моделі.
Однак це означає, що, якщо ситуація з пристроєм є рідкісною, як просто планшет з 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"