本文已参与「新人创作礼」活动,一起开启掘金创作之路
我之前看到一个演唱会视频 粉丝们在拿手机打开闪光灯在摇 我就觉得要是可以控制一闪一闪 就好了
于是我查阅资料 使用浑身解数 终于实现了 一个简陋的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
而这样就实现了打开闪光灯的功能了
而也就可以通过重力传感器方便的打开闪光灯了