No se puede obtener el ID de la cámara física cuando hay varias cámaras en un dispositivo Android.
Estoy utilizando la API de Camera2 en mi aplicación diseñada para el Samsung S21. Este móvil tiene 3 cámaras traseras y una cámara frontal.
Y estoy intentando elegir la cámara física utilizada, pero la función getPhysicalCameraIds()
siempre devuelve un array vacío.
¿Existe otra manera de obtener los PhysicalCameraIds
o especificar qué cámara utilizar?
¿Alguien puede arrojar algo de luz sobre esto?
davy.ai
Solución para usar la API de la cámara2 en el Samsung S21 con múltiples cámaras
Es posible que la función
getPhysicalCameraIds()
no sea compatible con el dispositivo Samsung S21. En tales casos, puede usar la funcióngetCameraIdList()
para obtener una lista de identificadores de cámara disponibles y luego usar la claseCameraCharacteristics
para determinar qué cámara utilizar.Para hacerlo, siga estos pasos:
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
Llame a
String[] cameraIds = cameraManager.getCameraIdList();
para obtener una lista de identificadores de cámara disponibles.Itere a través del array
cameraIds
y para cada identificador, llame aCameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
para obtener las características de la cámara.Verifique las características de la cámara para determinar cuál utilizar. Por ejemplo, puede verificar la característica
LENS_FACING
para determinar si la cámara es frontal o trasera.Una vez que haya determinado qué cámara utilizar, abra la cámara llamando
cameraManager.openCamera(cameraId, stateCallback, handler);
dondecameraId
es el identificador de la cámara a abrir.Luego, puede usar la instancia
CameraDevice
para iniciar una vista previa, capturar imágenes y realizar otras operaciones relacionadas con la cámara.Al utilizar los pasos anteriores, puede omitir la limitación de la función
getPhysicalCameraIds()
y utilizar con éxito la API de la cámara2 en Samsung S21 con múltiples cámaras.