Todos los métodos de respuestas anteriores están obsoletos por Google (supuestamente debido a problemas como este), ya que API 21 necesita usar la API de Camera 2:
Esta clase quedó obsoleta en el nivel de API 21. Recomendamos utilizar la nueva API android.hardware.camera2 para nuevas aplicaciones.
En la API más nueva , tiene un poder casi completo sobre la cámara del dispositivo Android y la documentación se aconseja explícitamente a
String[] getCameraIdList()
y luego use CameraId obtenido para abrir la cámara:
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
El 99% de las cámaras frontales tienen id = "1", y la cámara trasera id = "0"
según esto:
Las cámaras no extraíbles utilizan números enteros que comienzan en 0 para sus identificadores, mientras que las cámaras extraíbles tienen un identificador único para cada dispositivo individual, incluso si son del mismo modelo.
Sin embargo , esto significa que si la situación del dispositivo es poco común, como una tableta con una cámara frontal, debe contar cuántas cámaras integradas tiene y colocar el orden de la cámara por su importancia ("0"). Entonces CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0, lo que implica que la cámara trasera es más importante que la frontal.
No conozco un método uniforme para identificar la cámara frontal en todos los dispositivos Android. En pocas palabras, el sistema operativo Android dentro del dispositivo no puede saber realmente qué cámara está exactamente donde por algunas razones: tal vez la única identificación codificada de la cámara sea un número entero que represente su importancia o tal vez en algunos dispositivos, el lado al que mire será ... " espalda".
Documentación : https://developer.android.com/reference/android/hardware/camera2/package-summary.html
Ejemplos explícitos : https://github.com/googlesamples/android-Camera2Basic
Para la API anterior (no se recomienda, porque no funcionará en teléfonos modernos con la versión más reciente de Android y la transferencia es una molestia). Simplemente use el mismo ID de cámara entero (1) para abrir la cámara frontal como en esta respuesta :
cam = Camera.open(1)
Si confía en OpenCV para hacer la parte de la cámara:
Dentro
<org.opencv.android.JavaCameraView
../>
utilice lo siguiente para la cámara frontal:
opencv:camera_id="1"