作者:CodingCode
链接:https://www.jianshu.com/p/d349047e6515
来源:简书
android写文件总是报错:java.io.FileNotFoundException:open failed: EACCES (Permission denied),百度、谷歌了半天,最终发现只有这个做法是有效的:
在Android 6.0及以上版本中,有些权限属于Protected Permission,这类权限只在AndroidManifest.xml中声明是无法真正获取到的,还需要在代码中动态获取,然后再运行时用户在权限许可弹出对话框点击了“允许”后,方可真正获得此权限。
解决办法是,添加如下动态代码:
if (Build.VERSION.SDK_INT >= 23) {
int REQUEST_CODE_PERMISSION_STORAGE = 100;
String[] permissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
for (String str : permissions) {
if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
this.requestPermissions(permissions, REQUEST_CODE_PERMISSION_STORAGE);
return;
}
}
}
定义requestPermissions()的回调函数
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permission,
int[] grantResults) {
//requestCode就是requestPermissions()的第三个参数
//permission就是requestPermissions()的第二个参数
//grantResults是结果,0调试通过,-1表示拒绝
}