检测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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值