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
相关产品推荐
相关产品推荐

