今天来整理一下获取动态权限的代码。
首先拿到我们想要获取的权限,如果有多个我们在判断的时候 || 就可以了,只要有一个没有,我们就去申请权限。
我这里就先只申请一个。
下面的就是检查权限的方法。
PackageManager pkgManager = getPackageManager();
boolean readPhonePermission =
pkgManager.checkPermission(Manifest.permission.READ_PHONE_STATE, getPackageName()) == PackageManager.PERMISSION_GRANTED;
if ( !readPhonePermission) {
//没有权限
requestPermission();
}else{
//有权限了
intViewData();
}
有权限的话,你就做你改做的事就好了,没有权限的时候,去申请。
数组里面就是你要申请的权限,我这里就申请一个,多个的话就逗号隔开就好了。100是权限的回调。
//申请权限
private void requestPermission() {
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_PHONE_STATE
},
100);
}
权限回调的话,我做了一个判断,判断我刚才申请的权限是否给了,如果有了,就做改做的事了,没有的话,我是做了弹框告诉他需要申请权限,取消的话就退出应用,确定的话就再次走一遍检查权限的代码就好了。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 未同意的情况
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {
// 给用于予以权限解释, 对于已经拒绝过的情况,先提示申请理由,再进行申请
CommonDialog commonDialog = new CommonDialog(this);
commonDialog.setTitle("权限管理")
.setMessage("您需要打开权限")
.setLeftButton("取消")
.setRightButton("申请")
.show();
commonDialog.setOnClickBottomListener(new CommonDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
commonDialog.dismiss();
//这个方法就是申请权限的方法
checkPermission();
}
@Override
public void onNegtiveClick() {
Toast.makeText(FramApplication.getContext(), "请打开权限", Toast.LENGTH_SHORT).show();
commonDialog.dismiss();
System.exit(0);
}
@Override
public void onCloseClick() {
Toast.makeText(FramApplication.getContext(), "请打开权限", Toast.LENGTH_SHORT).show();
commonDialog.dismiss();
System.exit(0);
}
});
return;
}else{
//有权限了
intViewData();
}
}
好了,动态申请权限就做好了,不过需要注意的就是
你的权限必须在application上面,我测试的时候发现写在下面调不到权限的!!!