原文链接:http://blog.csdn.net/android_hdh/article/details/52583557
-------------------------------
最近在开发项目时,项目需要获取系统的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] 的结果有两种一种是授权,一种是阻止,当授权时就执行你的相应操作,否则就关闭程序。
好了关于动态获取权限的流程就是这些,如果你觉得有用就顶一个吧,哈哈