android 中添加了读写文件的权限,却报open failed: EACCES (Permission denied)
太坑人了!
添加了权限
//代码部分:
File file2 = new File(Environment.getExternalStorageDirectory(),"file2.txt");
file2.setWritable(true);
file2.setReadable(true);
FileOutputStream fos = new FileOutputStream(file2);
fos.write("nihao world".getBytes());
报错
java.io.IOException: open failed: EACCES (Permission denied)
com.example.testfile W/System.err: at java.io.File.createNewFile(File.java:939)
com.example.testfile W/System.err: at com.example.testfile.MainActivity.createFile(MainActivity.java:31)
安卓6.0以上即使添加了权限也不会自动授权,需要在用权限的时候进行动态获取权限,要么把sdk调到22
需要加入运行时权限,代码如下
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((BaseActivity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
权限都申请的话,如果是USB连接到电脑上测试,而且USB选择的是Mediea,请拔掉USB线,再重启App
使用真机调试手机连接进入后会一个usb数据存储开关,软件读写不了SD卡的。
理论上是可以好,换个手机试下
这两个权限添加了吗
添加的位置对吗
除了权限 还要判断 版本号 api 19以下 和19以上 要在 sd卡 的 data/data/包名/cache下写 文件 6.0的就不能在sd卡写东西 还有手机厂商 要是公司的应用你就多判断一下
时过多年没想到这个问题还有人回答,自己回答一下,关于权限问题,6.0以后,除了在AndroidManifest.xml文件中申明需要的权限,还需要在代码动态申请,目前在代码中我用的动态申请权限工具是RxPermission
代码:请求定位权限:Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION
这两个权限需要申明在代码,AndroidManifest文件中。**_两次_**
new RxPermissions(this)
.request(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION)
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean grant) throws Exception {
if(!grant){
Toast.makeText(LoginActivity.this,"获取定位权限失败,无法加载地图",Toast.LENGTH_SHORT).show();
}
}
});
为什么清单文件填了权限,动态申请也申请了,手机设置里面查看app的权限确实也允许了,为什么还包这个Permission denied 创建文件夹没权限,
完了