您的位置:首页 > 移动开发 > Android开发

请求权限被拒绝的检测及处理

2015-11-11 00:34 399 查看
背景

正确的检查权限

请求权限的回调

背景

最近项目中请求打电话权限,然后正好手机中安装了360,拒绝了权限申请之后发现再次点击就没有反应了,因此需要先检查一下权限,网上有些说

PackageManager pm = getPackageManager();
int permission = pm.checkPermission("android.permission.CALL_PHONE", "packageName");
if (permission == PackageManager.PERMISSION_GRANTED){
//具有权限
}


但是这样肯定是步行的,checkPermission()方法只是检查有没有申请这个权限,而不能检查申请了之后又没有被拒绝

正确的做法应该是被拒绝之后提示用户权限被拒绝,再次点击时判断如果被拒绝就申请权限

正确的检查权限

应该使用ContextCompat的checkSelfPermission()方法,代码如下:

int checkCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.CALL_PHONE);
if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
//没有权限或被拒绝,重新申请
ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.CALL_PHONE},REQUEST_CODE_ASK_CALL_PHONE);
return;
}else{
//具有权限,调用自己的打电话的方法
call(phone);
}


请求权限的回调

有请求权限的方法,当然也有返回的请求结果,我们只需要重写Activity的onRequestPermissionsResult()方法即可。代码如下:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_CALL_PHONE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 请求成功,获得权限,拨打电话
call(phone);
} else {
// 请求被拒绝,提示用户
Toast.makeText(MainActivity.this, "CALL_PHONE Denied", Toast.LENGTH_SHORT)
.show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息