问题描述
我已经在Android应用程序中实现了Camera2
。为了拍照,我写了这种方法
public void takePicture(final MethodChannel.Result result,char captureFlashMode) {
try {
ImageReader reader = ImageReader.newInstance(previewSize.getWidth(),previewSize.getHeight(),ImageFormat.JPEG,1);
final File file = new File(activity.getCacheDir(),"pic.jpg");
reader.setOnImageAvailableListener(new TakePictureImageListener(flutterMethodListener,result,file),backgroundHandler);
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.addTarget(reader.getSurface());
captureBuilder.set(CaptureRequest.CONTROL_MODE,CameraMetadata.CONTROL_MODE_AUTO);
setFlashMode(captureBuilder,captureFlashMode);
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION,getJpegOrientation());
captureRequestBuilder.addTarget(reader.getSurface());
cameraDevice.createCaptureSession(Arrays.asList(reader.getSurface()),new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(CameraCaptureSession session) {
try {
session.capture(captureBuilder.build(),new CaptureListener(CameraView.this,flutterMethodListener,backgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(CameraCaptureSession session) {
flutterMethodListener.onTakePictureFailed(result,"-11","Error in configure session");
}
},backgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
这是setFlashMode
方法。
private void setFlashMode(CaptureRequest.Builder previewRequestBuilder,char flashMode) {
if(flashSupported) {
switch (flashMode) {
case 'A':
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
break;
case 'O':
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON);
previewRequestBuilder.set(CaptureRequest.FLASH_MODE,CameraMetadata.FLASH_MODE_TORCH);
break;
case 'F':
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.FLASH_MODE_OFF);
}
}
}
我将A
作为自动手电筒传递给setFlashMode
方法。
我的问题仅在Samsung S6(android 7)这样的少数手机中,onConfigured
无法通话,而onConfigureFailed
被通话,所以我无法拍照。
调试后,通过在requestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);
方法中注释setFlashMode
,onConfigured
成功调用,我可以拍照了。
三星S6中的CONTROL_AE_MODE_ON_AUTO_FLASH
有什么问题?
设置自动闪光灯以在Camera2
中拍照的最佳做法是什么
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)