相机打开时闪光灯不工作
Posted
技术标签:
【中文标题】相机打开时闪光灯不工作【英文标题】:flash light is not working when camera is on 【发布时间】:2019-03-03 08:26:33 【问题描述】:我正在使用谷歌视觉创建条形码阅读应用程序,它还包含一个闪光开/关功能。由于“相机”现在已弃用,我能够使用“CameraManager”在下面的代码中实现闪光灯。但是当相机屏幕打开时,闪光灯不工作。当相机冻结时(当检测到条形码时,我停止camerasource),闪光灯正在工作。但是我想在不考虑相机视图打开或停止的情况下打开/关闭闪光灯。我需要在不使用已弃用的 API 的情况下完成此操作。有人可以告诉我如何解决这个问题。提前致谢。
private void setupBarcode()
cameraPreview = (SurfaceView) findViewById(R.id.cameraPreview);
txtResult = findViewById(R.id.txtResult);
barcodeDetector = new BarcodeDetector.Builder(this)
.setBarcodeFormats(Barcode.ALL_FORMATS)
.build();
cameraSource = new CameraSource
.Builder(this, barcodeDetector)
.setAutoFocusEnabled(true)
.build();
//Add Event
cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback()
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder)
if (ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
//Request permission
ActivityCompat.requestPermissions(ScanActivity.this,
new String[]Manifest.permission.CAMERA, RequestCameraPermissionID);
return;
try
cameraSource.start(cameraPreview.getHolder());
txtResult.setText("");
catch (IOException e)
e.printStackTrace();
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2)
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder)
cameraSource.stop();
);
barcodeDetector.setProcessor(new Detector.Processor<Barcode>()
@Override
public void release()
@Override
public void receiveDetections(Detector.Detections<Barcode> detections)
final SparseArray<Barcode> qrcodes = detections.getDetectedItems();
if (qrcodes.size() != 0)
txtResult.post(new Runnable()
@Override
public void run()
okButton.setEnabled(true);
txtResult.setText(qrcodes.valueAt(0).displayValue);
cameraSource.stop();
);
);
private void flashLightOn()
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try
String cameraId = cameraManager.getCameraIdList()[0];
cameraManager.setTorchMode(cameraId, true);
catch (CameraAccessException e)
【问题讨论】:
【参考方案1】:在您的项目中使用来自 goole vision 库的开源“CameraSource.java”文件。 Get file from here
然后使用下面的代码:
public void switchFlashLight(boolean status)
cameraSource.setFlashMode(status ? Camera.Parameters.FLASH_MODE_TORCH : Camera.Parameters.FLASH_MODE_OFF);
【讨论】:
以上是关于相机打开时闪光灯不工作的主要内容,如果未能解决你的问题,请参考以下文章
在相机 2 上使用闪光灯拍照会在“发生”闪光灯后(即没有闪光灯)给出照片