2018-11-09 手电筒的控制

1.控制手电筒开关的工具类:

public class FlashUtils {

    private CameraManager manager;

    private Camera mCamera = null;

    private Context context;

    private boolean status = false;//记录手电筒状态

    FlashUtils(Context context){

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);

        }

        this.context = context;

    }

    //打开手电筒

    public void open() {

        if(status){//如果已经是打开状态,不需要打开

            return;

        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            try {

                manager.setTorchMode("0", true);

            } catch (Exception e) {

                e.printStackTrace();

            }

        } else {

            PackageManager packageManager = context.getPackageManager();

            FeatureInfo[] features = packageManager.getSystemAvailableFeatures();

            for (FeatureInfo featureInfo : features) {

                if (PackageManager.FEATURE_CAMERA_FLASH.equals(featureInfo.name)) { // 判断设备是否支持闪光灯

                    if (null == mCamera) {

                        mCamera = Camera.open();

                    }

                    Camera.Parameters parameters = mCamera.getParameters();

                    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

                    mCamera.setParameters(parameters);

                    mCamera.startPreview();

                }

            }

        }

        status = true;//记录手电筒状态为打开

    }

    //关闭手电筒

    public void close() {

        if(!status){//如果已经是关闭状态,不需要打开

            return;

        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            try {

                manager.setTorchMode("0", false);

            } catch (CameraAccessException e) {

                e.printStackTrace();

            }

        } else {

            if (mCamera != null) {

                mCamera.stopPreview();

                mCamera.release();

                mCamera = null;

            }

        }

        status = false;//记录手电筒状态为关闭

    }

    //改变手电筒状态

    public void converse(){

        if(status){

            close();

        }else{

            open();

        }

    }

}

2.使用方法:

FlashUtils utils = new FlashUtils(this);

        utils.open();//打开手电筒

//        utils.close();//关闭手电筒

3.示例程序已上传:

https://github.com/wkxjc/FlashlightStudy

你可能感兴趣的:(2018-11-09 手电筒的控制)