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

Android API12下DownloadManager下载后文件检测始终返回不存在

问题原因与解决方案

你的核心问题是错误地将Content URI字符串直接传给File类构造函数,导致无法正确定位文件。

具体错误点

DownloadManager.COLUMN_LOCAL_URI返回的是形如content://downloads/my_downloads/xxx的Content URI字符串,而File类需要的是本地文件系统的绝对路径(比如/storage/emulated/0/Android/data/你的包名/files/Download/myfile.zip)。直接用Content URI创建File对象,自然会返回文件不存在。

修复方案(最简单直接)

替换获取路径的方式,改用DownloadManager.COLUMN_LOCAL_FILENAME获取文件的绝对路径:

修改onReceive方法中获取路径的代码:

// 替换原来的uriString赋值语句
uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));

这个字段在API 11及以上可用,完全适配你的API 12环境。修改后,checkIfFileExists方法中的new File(uriString)就能正确指向下载后的文件,file.exists()会返回预期的true。

额外注意事项

  • 确保在AndroidManifest.xml中声明了必要的存储权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    虽然你使用的是getExternalFilesDir(属于应用私有外部存储),但API 12仍需声明该权限才能正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:45:34