Android之使用闪光灯

1,160 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

我之前看到一个演唱会视频 粉丝们在拿手机打开闪光灯在摇 我就觉得要是可以控制一闪一闪 就好了

于是我查阅资料 使用浑身解数 终于实现了 一个简陋的demo

而这一篇就是教你如何打开闪光灯的

首先我们先在AndroidManifest.xml开启闪光灯权限

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

然后开启代码如下

   @TargetApi(Build.VERSION_CODES.N)
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public void changeFlashLight() {
        //判断API是否大于24(安卓7.0系统对应的API)
        if (VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            try {
                //获取CameraManager

                CameraManager mCameraManager= (CameraManager) this.getSystemService(Context.CAMERA_SERVICE);
//                CameraManager mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
                //获取当前手机所有摄像头设备ID
                String[] ids  = mCameraManager.getCameraIdList();
                for (String id : ids) {
                    CameraCharacteristics c = mCameraManager.getCameraCharacteristics(id);
                    //查询该摄像头组件是否包含闪光灯
                    Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
                    Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
                    if (flashAvailable != null && flashAvailable
                            && lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
                        //打开或关闭手电筒
                        mCameraManager.setTorchMode(id,true);
                        System.out.print("亮");
                    }
                }
            } catch (CameraAccessException e) {
                e.printStackTrace();

            }
        }
    }

首先要判断安卓的API版本是多少 因为有一些在低版本里运行不了

如果版本正常 通过 CameraManager mCameraManager= (CameraManager) this.getSystemService(Context.CAMERA_SERVICE); 获取摄像头的管理器

然后通过mCameraManager.getCameraIdList();摄像头管理器 获取当前手机所有摄像头设备ID

获取了之后 通过摄像头id 用一个for循环来检查摄像头组件是否含有闪光灯组件 因为不是所以的摄像头都有闪光灯的 摄像头也分前置 和后置的

如果通过 Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);获取到含有闪光灯

就可以通过mCameraManager.setTorchMode(id,true);打开闪光灯了

这个方法有两个参数

1.第一个是摄像头的id

2.第二个是是否打开摄像头 打开为true 关闭为false

而这样就实现了打开闪光灯的功能了

而也就可以通过重力传感器方便的打开闪光灯了