原文鏈接: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] 的結果有兩種一種是授權,一種是阻止,當授權時就執行你的相應操作,否則就關閉程序。
好了關于動態獲取權限的流程就是這些,如果你覺得有用就頂一個吧,哈哈