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

Android 12代码读取Downloads目录仅显示部分文件,与Files应用不一致

问题原因及解决方案

核心原因:Android 12的存储权限限制

从Android 11(API 30)起的分区存储机制,在Android 12(API 31)中进一步强化:

  • Environment.getExternalStoragePublicDirectory() 已被废弃,不再推荐用于访问公共存储目录。
  • 应用默认仅能访问自身创建的文件,以及公共目录内的媒体文件(图片、音频、视频)。你能读取短信下载的图片,是因为它们属于媒体范畴;而Excel文件属于非媒体类文档,应用无直接读取权限。

文件实际位置

文件确实在系统Files显示的公共Downloads目录(/storage/emulated/0/Download),只是你的应用没有权限访问这类非媒体文件。

可行解决方式

  • 使用存储访问框架(SAF):通过ACTION_OPEN_DOCUMENT或ACTION_GET_CONTENT让用户手动选择文件,无需特殊权限,是官方推荐的非媒体文件访问方式。
  • 申请MANAGE_EXTERNAL_STORAGE权限:若应用需批量访问公共目录全量文件,可在Manifest中添加权限:
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        android:minSdkVersion="30" />
    
    再在代码中动态请求权限,但该权限仅适用于文件管理器类特定应用,普通应用提交Google Play可能被拒。
  • MediaStore API(仅适用于媒体文件):此方法仅能访问媒体类型文件,不适用Excel等文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:45:01