当前位置:   article > 正文

安卓文件读写出现open failed: EACCES (Permission denied)的问题_android 读取下载文件 open failed: eacces (permission den

android 读取下载文件 open failed: eacces (permission denied)

我在将网路图片读取到本地时:logcat报java.io.IOException: open failed: EACCES (Permission denied)问题

当时查看了网上的一些资源大部分是说 manifest中配置的权限问题 我的配置文件如下

  1. <uses-permission android:name="android.permission.INTERNET"/>
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  3. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

还有当时我看到一篇2B博客说是把 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>放到 <activity>中为此我只能无语了

后来发现是应为4.0以后的版本的sd卡有了内外之分,当然如果你的配置没问题且代码无误,再4.0之前的版本是不会出现这个问题的

在2.x的版本中,在manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限用来设置了内置sd卡的写权限,如果在manifest中只是配置了这个权限,那个应用只能在内置sd卡中进行写操作,还是无法在外置sd卡中进行写操作。需要写外置sd卡的话,需要配置另一个权限android.permission.WRITE_MEDIA_STORAGE,这样就可以在外置sd卡中进行写入操作了。
这两个权限都被定义在android源码目录\frameworks\base\data\etc\platform.xml中:

  1. <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
  2. <group gid="sdcard_rw" />
  3. </permission>
  4. <permission name="android.permission.WRITE_MEDIA_STORAGE" >
  5. <group gid="media_rw" />
  6. </permission>
从android 4.0以后就不允许这样操作了,因为如果在主线程进行数据操作,如果网络不好那么整个程序就卡死在那里了。所以android4.0以后对要联网的代码必须在新开一个线程来做

于是我在我的主文件里面添加了这样一段代码:

  1. <span style="white-space:pre"> </span>@SuppressLint("NewApi")
  2. public static void closeStrictMode() {
  3. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
  4. .detectAll().penaltyLog().build());
  5. }
如下:


于是乎问题就解决了!4.0以后的版本他认为主线程进行数据操作这样的写法不安全 读取和写入文件一般大多是由于这个原因引起的!大家一定要注意!!!


    

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/286229
推荐阅读
相关标签
  

闽ICP备14008679号