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

Android 12 保存图片时公共目录存储访问异常问题

解决卸载重装后存储权限EACCES错误的方案
  • 分区存储适配不到位
    Android 10(API 29)起引入分区存储机制,就算申请了READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE,直接用File类操作公共目录也可能被限制。卸载重装后,系统重置了应用的存储权限状态,没适配分区存储规则的话,就容易触发open failed: EACCES (Permission denied)错误。建议改用MediaStore API来保存媒体文件,别直接硬写文件路径。

  • 权限生效有延迟
    卸载重装后刚授予权限,系统可能还没同步完权限状态,要是立刻执行文件写入,就会碰权限拒绝。解决办法很简单:等权限申请成功的回调完全触发后再执行保存逻辑,或者加个权限状态检查,确认ContextCompat.checkSelfPermission返回PERMISSION_GRANTED再动手。

  • 公共目录的访问限制升级
    Android 11+对Download、Pictures这类公共目录管得更严,卸载重装后应用的存储访问令牌会失效,哪怕有基础权限也直接写不了。给你个示例代码,用MediaStore存图片:

    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.DISPLAY_NAME, "test.jpg");
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
    values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
    Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    OutputStream outputStream = getContentResolver().openOutputStream(uri);
    // 这里写入图片字节数据
    
  • 系统权限缓存残留
    有些系统卸载应用后会残留旧的权限缓存,导致新安装的应用权限状态异常。如果确认已经授予权限但还是报错,可以引导用户去应用设置里清除存储数据,再重试操作。

  • Android 13+权限细分问题
    Android 13(API 33)把存储权限拆成了READ_MEDIA_IMAGES、READ_MEDIA_VIDEO这类细分权限,要是还在申请旧的WRITE_EXTERNAL_STORAGE,卸载重装后大概率访问不了媒体目录。得根据系统版本动态申请对应权限,别一套权限走天下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:54:23