【问题标题】:how can i turn on both torch light(flash light) and back camera at the same time in android code如何在android代码中同时打开手电筒(闪光灯)和后置摄像头
【发布时间】:2020-02-21 12:15:48
【问题描述】:

当我打开闪光灯时。如果我使用 camera.release() 方法将相机用于后置相机图像,则相机会停止,闪光灯会关闭。

switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @SuppressLint("MissingPermission")
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            camera = Camera.open(); // for camera on purpose
            Camera.Parameters para = camera.getParameters();
            para.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(para);
            camera.startPreview();
            cameraSource.release();
            camera = null;
            try {
                cameraSource.start(surfaceView.getHolder());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
});
      //   when I turned on the flash. the camera stops if I use camera.release() method to use the camera for back camera image taking the flash turns off.  

【问题讨论】:

    标签: java androidx


    【解决方案1】:

    在 API 23 或更高版本中

    这就是你开启的方式

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        String cameraId = null; 
        try {
            cameraId = camManager.getCameraIdList()[0];
            camManager.setTorchMode(cameraId, true);   //Turn ON
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
    

    这是关闭的方式

    camManager.setTorchMode(cameraId, false);
    

    需要的权限

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.FLASHLIGHT"/>
    

    完整的实现可能如下所示

    public class CameraAndFlashProvider {
    
    private static final String TAG = FlashlightProvider.class.getSimpleName();
    private Camera mCamera;
    private Camera.Parameters parameters;
    private CameraManager camManager;
    private Context context;
    
    public CameraAndFlashProvider(Context context) {
        this.context = context;
    }
    
    private void turnFlashlightOn() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
                String cameraId = null; 
                if (camManager != null) {
                    cameraId = camManager.getCameraIdList()[0];
                    camManager.setTorchMode(cameraId, true);
                }
            } catch (CameraAccessException e) {
                Log.e(TAG, e.toString());
            }
        } else {
            mCamera = Camera.open();
            parameters = mCamera.getParameters();
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            mCamera.setParameters(parameters);
            mCamera.startPreview();
        }
    }
    
    private void turnFlashlightOff() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                String cameraId;
                camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
                if (camManager != null) {
                    cameraId = camManager.getCameraIdList()[0]; // Usually front camera is at 0 position.
                    camManager.setTorchMode(cameraId, false);
                }
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        } else {
            mCamera = Camera.open();
            parameters = mCamera.getParameters();
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            mCamera.setParameters(parameters);
            mCamera.stopPreview();
        }
    }
    }
    

    【讨论】:

    • 我遇到了这个问题:android.hardware.camera2.CameraAccessException: CAMERA_IN_USE (4): setTorchMode:1905: Torch for camera "0" is not available due to an existing camera user
    • 在清单上同时拥有CAMERAFLASHLIGHT 权限时似乎无法正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多