相机打开时闪光灯不工作

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 API 视频录制 - 自动闪光不工作

如何在不停止相机馈送的情况下使用闪光灯?

在相机 2 上使用闪光灯拍照会在“发生”闪光灯后(即没有闪光灯)给出照片

使用 wakelock.release() 关闭应用程序时,Android 应用程序崩溃

为自定义相机转动闪光灯时前置相机崩溃?

我需要啥权限才能在相机预览中使用相机闪光灯?