之前的博客中,我有讲过如何封装一个动态权限的基类。但可能很多读者还是不清楚怎么去申请动态权限。正好看书看到这里了,我也总结一下。
申请权限
public static boolean checkPermission(Activity act,String permission,int requestCode){
boolean result = true;
//只对Android 6.0及以上系统进行校验
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
//检查当前APP是否开启了名称为permission
int check = ContextCompat.checkSelfPermission(act,permission);
if (check!= PackageManager.PERMISSION_GRANTED){
//未开启该权限,则请求系统弹窗,好让用户选择是否立即开启权限
ActivityCompat.requestPermissions(act,new String[]{permission},requestCode);
result = false;
}
}
return result;
}
权限申请后的回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == mRequestCode){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
//已授权,则进行后续的正常逻辑处理
ToastUtil.toastWord(this,"授权了");
}else{
//未授权,则提示用户可能导致的问题
ToastUtil.toastWord(this,"没授权");
}
}
}
最后就是我们调用检查权限的方法,并传入识别码mRequestCode
checkPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE,mRequestCode);
其中识别码
private final int mRequestCode = 1001;//定义的请求权限识别
这里说明一下,当我们判断用户没有获取过该权限的时候,我们会进行请求。这时手机会弹框,询问用户是否进行授权。如果用户授权了,我们进入回调提示授权成功,这个没什么说的。如果用户进入禁止,我们进入回调的未授权判断,用户再次申请的时候依然弹框,这也是可以的。
但是当用户勾选了禁止后不再询问,再点击禁止。那么问题就大了,因为以后都会不弹框直接进入没授权。所以如果我们会存在这种情况的话,就要进行相关判断让用户进入设置页面进行相应设置。不过这里我就不说这么多了,大家慢慢探索。