Android实现二维码扫描功能(三)-闪光灯控制

本篇我们对光线暗淡情况下闪光灯的使用做出介绍。

效果
晚上测试时:

开灯后:

Android实现二维码扫描功能(三)-闪光灯控制_第1张图片

未开灯:

Android实现二维码扫描功能(三)-闪光灯控制_第2张图片

实现步骤
1、在activity_scanner.xml界面上加上闪光灯开关按钮。可以是Button、Checkbox等控件。



    ...

    

        

        

        
    


编辑区域预览

Android实现二维码扫描功能(三)-闪光灯控制_第3张图片
2、修改com.google.zxing.camera.CameraManager类,添加setFlashLight方法。

/**
     * 打开或关闭闪光灯
     * @param isOpen 是否开启闪光灯
     * @return boolean 操作成功/失败。
     */
    public boolean setFlashLight(boolean isOpen) {
        if (camera == null || !previewing) {
            return false;
        }
        Camera.Parameters parameters = camera.getParameters();
        if (parameters == null) {
            return false;
        }
        List flashModes = parameters.getSupportedFlashModes();
        // 检查手机是否有闪光灯
        if (null == flashModes || 0 == flashModes.size()) {
            // 没有闪光灯则返回
            return false;
        }
        String flashMode = parameters.getFlashMode();
        if (isOpen) {
            if (Camera.Parameters.FLASH_MODE_TORCH.equals(flashMode)) {
                return true;
            }
            // 开启
            if (flashModes.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                camera.setParameters(parameters);
                return true;
            } else {
                return false;
            }
        } else {
            if (Camera.Parameters.FLASH_MODE_OFF.equals(flashMode)) {
                return true;
            }
            // 关闭
            if (flashModes.contains(Camera.Parameters.FLASH_MODE_OFF)) {
                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                camera.setParameters(parameters);
                return true;
            } else {
                return false;
            }
        }
    }


3、在com.google.zxing.activity.CaptureActivity类中添加闪光灯开关相关代码。

btnFlash = (ImageButton) findViewById(R.id.btn_flash);
btnFlash.setOnClickListener(flashListener);

/**
 *  闪光灯开关按钮
 */
private View.OnClickListener flashListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        try {
            boolean isSuccess = CameraManager.get().setFlashLight(!isFlashOn);
            if(!isSuccess){
                Toast.makeText(CaptureActivity.this, "暂时无法开启闪光灯", Toast.LENGTH_SHORT).show();
                return;
            }
            if (isFlashOn) {
                // 关闭闪光灯
                btnFlash.setImageResource(R.drawable.flash_off);
                isFlashOn = false;
            } else {
                // 开启闪光灯
                btnFlash.setImageResource(R.drawable.flash_on);
                isFlashOn = true;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
};


运行即可查看效果。

你可能感兴趣的:(android)