Android6.0系统以后的危险权限不禁要在Manifest.xml中注册,还有做动态申请,下面以申请SD卡读写权限为例:
/**
* 权限申请 SD卡的读写权限
* @param activity
*/
private void verifyStoragePermission(Activity activity){
//1检测权限
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission!= PermissionChecker.PERMISSION_GRANTED){
//2没有权限,需要申请权限,弹出对话框
ActivityCompat.requestPermissions(activity,PERMISSION_STORAGE,REQUSET_CODE_STORAGE);
}
}
定义一个方法,首先检测有没有写入SD卡的权限,如果没有此权限,那么将弹出对话框申请权限。ActivityCompat.requestPermissions(activity,PERMISSION_STORAGE,REQUSET_CODE_STORAGE);的三个参数分别为:上下文对象,需要申请权限的数组,申请码。
private static final int REQUSET_CODE_STORAGE = 1;
private String[] PERMISSION_STORAGE ={
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
然后定义一下后两个参数,申请权限的数组为SD卡的读和写的权限,申请码定义为1。
/**
* @param requestCode 请求码
* @param permissions 申请的权限
* @param grantResults 请求结果的集合
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0]==PermissionChecker.PERMISSION_GRANTED){
//申请权限成功
Toast.makeText(this,"授权SD卡权限成功",Toast.LENGTH_SHORT).show();
}else {
//申请权限失败
Toast.makeText(this,"授权SD卡权限失败,可能会影响应用的使用",Toast.LENGTH_SHORT).show();
}
}
重写onRequestPermissionsResult方法作为申请权限的回调,用于用户操作后的处理,三个参数如注释所示。
最后一定不要忘记在清单文件中做注册
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
以上就是简单的关于对权限动态注册的模板,仅此作为个人记录,欢迎大家指出错误指出和提出更好的建议。