在camera2中设置自动闪光会导致createCaptureSession失败

问题描述

我已经在Android应用程序中实现了Camera2。为了拍照,我写了这种方法

@H_404_4@ 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方法

@H_404_4@ 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);方法中注释setFlashModeonConfigured成功调用,我可以拍照了。

三星S6中的CONTROL_AE_MODE_ON_AUTO_FLASH有什么问题?

设置自动闪光灯以在Camera2中拍照的最佳做法是什么

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)