最近在开发项目时,项目需要获取系统的WRITE_EXTERNAL_STORAGE权限,然后就在清单文件AndroidManifest中添加了该权限,但是在系统运行后发现并没有创建该有的文件,然后查看了一下日志发现系统提示没有获得权限,之后在网上搜索了下发现Android6.0之后需要动态获取这种权限,然后改了一下果真可以了,下面把动态获取权限的过程讲解一下,以备将来查看和帮助哪些遇到同样问题的人。
下面贴出请求动态获取权限的代码
自己定义的请求Code
private final static int REQUEST_CODE_ASK_WRITE_EXTERNAL_STORAGE=0x123;
if(Build.VERSION.SDK_INT >= 23){//判断当前系统的版本
int checkWriteStoragePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);//获取系统是否被授予该种权限
if(checkWriteStoragePermission != PackageManager.PERMISSION_GRANTED){//如果没有被授予
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE_ASK_WRITE_EXTERNAL_STORAGE);
return;//请求获取该种权限
}else{
initEvent();//定义好的获取权限后的处理的事件
}
}else {
initEvent();
}
当触发了获取该权限的操作时会弹出一个提示框,会询问你是否允许添加该种权限,具体如下图
然而,我们如何知道用户是点了什么呢?这里我们需要重写一下事件onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){}
通过该事件来回调监听用户的操作
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode){
case REQUEST_CODE_ASK_WRITE_EXTERNAL_STORAGE:
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
initEvent();
}else{
finish();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
这里grantResults[0] 的结果有两种一种是授权,一种是阻止,当授权时就执行你的相应操作,否则就关闭程序。
好了关于动态获取权限的流程就是这些,如果你觉得有用就顶一个吧,哈哈