当我们要调用相机时一般会先检查是否有相机的使用权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
//已有权限
}else{
//没有权限,申请权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
11);
}
如果用户从系统设置里关闭权限 是没有问题的,
但是如果用户通过第三方安全软件限制了权限,就会出现检测到已经获得权限,但是不能使用照相机的情况!
这样就会导致后面逻辑出错或者拍照直接返回了一张空图片!(调用系统照相机被第三方限制权限时不会报任何异常,只是自己穿进去的url没有图片)
为了解决这个问题,做了各种尝试,各种框架,都没法准确的判断出是否被第三方限制了权限.
最后想到解决办法是直接调用照相机,如果能调用则认为有权限,如果中途报异常则认为么有权限
代码:
/**
* 通过尝试打开相机的方式判断有无拍照权限(在6.0以下使用拥有root权限的管理软件可以管理权限)
*
* @return
*/
public static boolean cameraIsCanUse() {
boolean isCanUse = true;
Camera mCamera = null;
try {
mCamera = Camera.open();
Camera.Parameters mParameters = mCamera.getParameters();
mCamera.setParameters(mParameters);
} catch (Exception e) {
isCanUse = false;
}
if (mCamera != null) {
try {
mCamera.release();
} catch (Exception e) {
e.printStackTrace();
return isCanUse;
}
}
return isCanUse;
}