• Android 6.0以后的版本报错:open failed: EACCES (Permission denied)


    Android 6.0以后的版本报错:open failed: EACCES (Permission denied)

    在开发项目中,遇见要进行文件操作,遇见Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)错误 .

    此问题共分为三步来解决:

    首先来说下联网和读写文件问题:

    1.添加权限(注意:6.0后的版本即使添加了权限还是会报错,但是权限声明是必须要加的)

    AndroidManifest.xml中添加权限:

     <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    2.添加了联网权限后还是连不上网,或者联网拒绝,这里四种解决办法:

    a.APP改用https

    b.targetSdkVersion 降到27以下

    c.AndroidManifest.xml中的application加入:

    <application
            android:usesCleartextTraffic="true" //这个是需要加入的内容,可以解决联网访问路径问题
                .....
                >

    d.c中比较复杂的写法:在res下创建xml文件夹,在xml文件夹中在建立network_security_config.xml文件,内容如下:

    network_security_config.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config>

    然后在AndroidManifest.xml的application标签中加入:

    android:networkSecurityConfig="@xml/network_security_config"

    3.此时还是会报无法存储的问题,这里是因为6.0后的权限需要手动申请,我们需要在MainActivity中加入如下的代码:

     private  final int REQUEST_EXTERNAL_STORAGE = 1;
        private  String[] PERMISSIONS_STORAGE = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE };
        public  void verifyStoragePermissions(Activity activity) {
            // Check if we have write permission
            int permission = ActivityCompat.checkSelfPermission(activity,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if (permission != PackageManager.PERMISSION_GRANTED) {
                // We don't have permission so prompt the user
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                        REQUEST_EXTERNAL_STORAGE);
            }
        }

    然后我们在onCreate方法中引用即可:

    verifyStoragePermissions(this);
  • 相关阅读:
    Linux 线程池的简单实现
    m3u8(HLS) 抓包
    一个面试问题的思考
    简单实现无需密码 sudo
    转: NAT 穿透
    一个平均分配算法
    raft 算法扫盲
    20210615 JVM 优化
    20210614. 并发编程
    20210606 Java 并发编程之美
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10622305.html
Copyright © 2020-2023  润新知