camera tip

有一个打开手机手电筒的需求,在二维码扫描框下面加个按钮,让用户可以打开手电筒,类似摩拜这样:

想着蛮简单:直接调用系统 Api 就可以了:

1
2
3
4
5
6
7
8
9
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
String[] camerList = manager.getCameraIdList();
manager.setTorchMode("0", true);
} catch (CameraAccessException e) {
Log.e("error", e.getMessage());
}
}

可是运行程序的时候程序报错:

1
2
error: CAMERA_IN_USE (4): setTorchMode:1405: Torch for camera "0" is not
available due to an existing camera user

在网上搜索好久,没有找到什么有用的解决办法,阅读 android 系统源码也没有好的思路。
报错信息提示相机已经被占用了,自己重新看了看需求,猜想可能是二维码扫描框占用了相机.
查看二维码扫描框的代码发现它调用的是老版本的相机 Api : android.hardware.Camera
此 Api 从 android 5.0 开始被废弃了(Deprecated since API level 21)。
终于找到问题了,原来是二维码扫描框用的是老 Api,而开启手电筒使用的是新 Api:
android.hardware.camera2.CameraManager
.将二维码扫描框的代码修改后,手电筒的功能就
正常了