Как управлять вспышкой камеры с помощью camera2 API
Я хочу управлять вспышкой смартфона (Galaxy s6) с помощью camera2 API.
Я проверил это доступно по кодам, как это,
try {
CameraManager mManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String [] cameraId = mManager.getCameraIdList();
CameraCharacteristics cameraCharacteristics = mManager.getCameraCharacteristics(cameraId[1]);
Toast.makeText(getApplicationContext(),cameraId[0]+cameraId[1],Toast.LENGTH_LONG).show();
boolean flashAvailable = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
if (flashAvailable) {
mManager.openCamera(cameraId[0], new MyStateCallback(), null);
Toast.makeText(getApplicationContext(),"Flash is available",Toast.LENGTH_LONG).show();
} else {
//todo: throw Exception
Toast.makeText(getApplicationContext(),"Flash is not available",Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
e.printStackTrace();
}
Но, Toast сообщение: Flash не доступен.
Конечно, я объявил разрешения и аппаратные функции в манифесте.
Разве невозможно управлять вспышкой с помощью этого устройства или API Camera2?
1 ответ
Вы проверяете, имеет ли вторая камера (вероятно, передняя) вспышку, потому что вы получаете характеристики камеры для cameraId[1] вместо cameraId[0] в 4-й строке.
Как правило, камера, обращенная назад, является первой, и она со вспышкой. Чтобы быть максимально устойчивым, переберите все идентификаторы камеры и проверьте, есть ли у них вспышка.