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

Android 11使用DownloadManager下载文件至Download文件夹失效问题

问题原因分析

你日志输出的status=1对应DownloadManager.STATUS_PENDING,表示下载任务还在队列中等待执行,尚未启动。你在调用downloadManager.enqueue(request)将任务加入队列后立刻执行状态查询,此时任务还没开始下载,自然返回失败,也不会生成下载文件。

同时你当前设置的存储路径为应用专属沙箱目录:getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),该路径下的文件不会出现在系统公共的Download文件夹中,需要到内部存储/Android/data/你的应用包名/files/Download目录下才能找到对应文件。

Android 11 除存储规则外的其他影响DownloadManager的变更
  • 明HTTP流量限制:Android 9及以上版本默认禁止明HTTP请求,若你的下载url是http协议而非https,且没有在Manifest中配置android:usesCleartextTraffic="true",下载请求会被系统直接拦截,任务一直处于pending状态或直接失败。
  • 应用待机分组限制:Android 11强化了应用待机分组策略,如果你的应用被系统划分到受限分组,后台发起的下载任务会被延迟执行,只有当应用回到前台时才会继续下载。
  • 下载管理器通知权限限制:你代码中设置了request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE),如果用户手动禁用了系统下载管理器的通知权限,Android 11上会导致需要展示通知的下载任务被卡住,无法正常执行。
  • 重定向限制:DownloadManager默认最多支持5次重定向,如果你的下载链接重定向次数超过该阈值,任务会直接终止返回错误。
  • 鉴权信息缺失:如果下载链接需要身份校验(如登录态Cookie、自定义请求头),你当前代码没有添加对应请求头,会导致服务器拒绝请求,下载任务无法正常执行。
代码修复建议

不要在任务入队后立刻查询下载状态,注册广播接收器监听DownloadManager.ACTION_DOWNLOAD_COMPLETE广播,收到广播后再根据下载ID查询任务状态,才是正确的处理逻辑。

如果你需要下载的文件展示在公共Download目录,Android 11及以上需要通过MediaStore API写入公共存储,或者申请MANAGE_EXTERNAL_STORAGE权限(仅适用于文件管理类应用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:45:03