前幾天準備學習下音樂播放器的製作,結果卡在了讀取存儲卡數據這一關,直接閃退了,後來發現是因爲android6.0以上版本將這種權限歸結於危險權限,需要主動申請纔可以。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />首先照例是在AndroidManifest.xml上加上這一條。
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ int hasReadContactsPeermission= PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE); if(hasReadContactsPeermission!= PackageManager.PERMISSION_GRANTED){ Activity activity= MainActivity.this; ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1); return ; }else{ initData(); }
然後根據下面的選擇,如果手機API>=23,則走第一個if,同時在根據是否已經獲取到權限,來決定直接訪問數據還是請求權限,走第二個if,else語句
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);參數1是當前activity活動,2是你請求的權限,3是requestCode,也就是下面截圖中的,用戶同意,就訪問查找數據,如果不同意,直接finish。
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if(requestCode==1) { if(permissions[0].equals(Manifest.permission.READ_EXTERNAL_STORAGE)&& grantResults[0]==PackageManager.PERMISSION_GRANTED){ //用戶同意 initData(); }else{ finish(); } } }