MiankeJava 2024-02-15 12:37 采纳率: 63.6%
浏览 7

android权限问题

img


遇到了EACCES问题
这里已经给予了read权限但是却提示拒绝访问

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-15 12:39
    关注

    引自免费微信小程序:皆我百晓生

    在Android开发中遇到EACCES权限拒绝访问错误,通常是因为应用程序试图访问设备上的某个文件或资源,而没有得到相应的系统权限。即使你在Manifest文件中声明了<uses-permission>标签以请求权限,但自Android 6.0(API级别23)及更高版本开始,还需要在运行时动态请求某些危险权限。

    1. 确认已添加权限声明

    确保在AndroidManifest.xml文件中已经为读取文件操作添加了适当的权限:

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

    2. 运行时权限检查与请求

    对于API级别23及以上,你需要在运行时检查和请求权限:

    // 检查当前应用是否具有读取外部存储的权限
    if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    
        // 如果应用之前请求过此权限但用户拒绝了请求,则此方法将返回 true。
        if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                Manifest.permission.READ_EXTERNAL_STORAGE)) {
            // 显示解释为何需要该权限的对话框或者UI,然后再次请求权限
        } else {
            // 直接请求权限
            ActivityCompat.requestPermissions(thisActivity,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
        }
    } else {
        // 已有权限,执行相应文件操作
    }
    
    // 在 onRequestPermissionsResult() 方法中处理用户的权限请求结果
    @Override
    public void onRequestPermissionsResult(int requestCode,
            String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
                // 如果请求被取消,那么 result 数组将为空。
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 权限申请成功,可以进行读取文件操作了
                } else {
                    // 权限申请失败,提示用户并做相应的处理
                }
                return;
            }
            // 其他“case”分支...
        }
    }
    

    请替换 thisActivity 为你的Activity实例,并且设置合适的 MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE 请求码。

    如果问题依然存在,请检查以下可能情况:

    • 是否正确地处理了用户对权限请求的响应?
    • 确保你尝试访问的文件路径是正确的,并且应用程序有权访问该特定路径下的文件。
    • 对于部分特殊目录,如私有目录、其他应用的数据等,即使拥有读写权限也可能无法直接访问。

    参考文档:

    评论

报告相同问题?

问题事件

  • 创建了问题 2月15日