前几天准备学习下音乐播放器的制作,结果卡在了读取存储卡数据这一关,直接闪退了,后来发现是因为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(); } } }