Todos os métodos de respostas mais antigos foram descontinuados pelo Google (supostamente por causa de problemas como este), já que a API 21 você precisa usar a API Camera 2:
Esta classe foi descontinuada na API de nível 21. Recomendamos o uso da nova API android.hardware.camera2 para novos aplicativos.
Na API mais recente, você tem poder quase total sobre a câmera do dispositivo Android e a documentação orienta explicitamente para
String[] getCameraIdList()
e usar o CameraId obtido para abrir a câmera:
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
99% das câmeras frontais têm id = "1", e a id da câmera traseira = "0" de
acordo com isto:
As câmeras não removíveis usam números inteiros começando em 0 para seus identificadores, enquanto as câmeras removíveis têm um identificador exclusivo para cada dispositivo individual, mesmo se forem do mesmo modelo.
No entanto , isso significa que se a situação do dispositivo for rara, como apenas um tablet com câmera frontal, você precisará contar quantas câmeras embutidas você tem e colocar a ordem da câmera por sua importância ("0"). Então CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0, o que implica que a câmera traseira é mais importante do que a frontal.
Não sei sobre um método uniforme para identificar a câmera frontal em todos os dispositivos Android. Dito de forma simples, o sistema operacional Android dentro do dispositivo não pode realmente descobrir qual câmera está exatamente onde por alguns motivos: talvez a única ID codificada da câmera seja um número inteiro representando sua importância ou talvez em alguns dispositivos, o lado que você virar estará .. " costas".
Documentação : https://developer.android.com/reference/android/hardware/camera2/package-summary.html
Exemplos explícitos : https://github.com/googlesamples/android-Camera2Basic
Para a API mais antiga (não é recomendado, porque não funcionará em telefones modernos com a versão Android mais recente e a transferência é uma dor no traseiro). Basta usar o mesmo Integer CameraID (1) para abrir a câmera frontal como nesta resposta :
cam = Camera.open(1)
Se você confia no OpenCV para fazer a parte da câmera:
Dentro
<org.opencv.android.JavaCameraView
../>
use o seguinte para a câmera frontal:
opencv:camera_id="1"