【问题标题】: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) {
    }
}

【问题讨论】:

    标签: android android-camera2 flashlight


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多