检测Adroid手机摄像机权限是否被第三方限制

当我们要调用相机时一般会先检查是否有相机的使用权限

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;
}

猜你喜欢

转载自blog.csdn.net/lqb3732842/article/details/54863221