You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android读取Download目录文件遇EACCES权限拒绝,添加权限仍未解决

Android读取Download目录文件报EACCES权限错误的解决办法
  • 动态申请存储权限:Android 6.0(API 23)及以上版本,仅在Manifest中声明权限不够,必须在代码中动态请求权限。示例代码:
private static final int REQUEST_CODE_STORAGE = 100;

// 检查并请求读取外部存储权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
            REQUEST_CODE_STORAGE);
}

// 处理权限申请结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_CODE_STORAGE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限已授予,执行文件读取操作
        } else {
            // 权限被拒绝,提示用户开启权限
        }
    }
}
  • 确认requestLegacyExternalStorage配置正确性:确保android:requestLegacyExternalStorage="true"属性正确添加在AndroidManifest.xml的<application>标签内,且无拼写错误。该配置仅对Android 10(API 29)生效。

  • 验证文件路径与存在性:确认目标文件/storage/emulated/0/Download/config.xlsx真实存在,检查文件名是否有拼写错误、文件是否被删除或移动。可通过系统文件管理器手动核实。

  • Android 11+适配方案:Android 11(API 30)及以上版本对外部存储权限限制更严格,即使启用legacy存储也可能失效。建议改用**存储访问框架(SAF)**获取文件:

private static final int REQUEST_CODE_OPEN_DOCUMENT = 101;

// 启动SAF选择xlsx文件
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT);

// 处理选择结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_OPEN_DOCUMENT && resultCode == RESULT_OK && data != null) {
        Uri uri = data.getData();
        // 通过Uri读取文件内容
        try (InputStream inputStream = getContentResolver().openInputStream(uri)) {
            // 处理文件流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 检查系统权限设置:前往手机系统设置→应用→目标应用→权限,确认存储权限已被授予,避免用户手动关闭或拒绝了权限申请。

内容的提问来源于stack exchange,提问作者Josort

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:55:22