安卓文件读写出现open failed: EACCES (Permission denied)的问题

来源:互联网 发布:java 7u40 编辑:程序博客网 时间:2024/05/16 11:11

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

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

    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <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中:

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

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

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


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


    

0 0
原创粉丝点击