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();
           }

       }
}

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