android中出现 java.io.IOException: open failed: EACCES (Permission denied)问题解决

今天在做项目的时候,在进行IO读写的时候出现java.io.IOException: open failed: EACCES (Permission denied)问题解决 ,一开始我还以为是Permission 的问题,不过找到AndroidManifest文件一看的时候:

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

我已经加了读写的权限了啊,怎么还会报这个错呢?

我接着查看IO操作的时候,文件保存的路径以及SD是否真的能用:
我用的是外部存储路径

String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/bank.apk";

校验SD卡是否可用的代码

public static boolean isExistSDCard() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File sd = new File(Environment.getExternalStorageDirectory().getPath());
            return sd.canWrite();
        } else
            return false;
    }

通过Log我发现isExistSDCard()方法返回了false,我突然间好像明白了什么。

因为公司是做自定义机器的android应用开发,机器问题很是经常出现,兼容程序在机器上能运行,我在内外部存储做了一层判断,代码如下:

boolean isExistSDCard = isExistSDCard();
        LogUtils.d(TAG,"isExistSDCard======="+isExistSDCard);
        String path = "";
        if (isExistSDCard){
            path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+apkName;
            LogUtils.d(TAG,"path======="+path);
        }else {
            path ="/data/data/com.tecsun.tsb/cache/"+apkName;
            LogUtils.d(TAG,"path======="+path);
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容