android 6.0API23以上版本安裝apk時獲取權限失敗

前幾天準備學習下音樂播放器的製作,結果卡在了讀取存儲卡數據這一關,直接閃退了,後來發現是因爲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();
           }

       }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章