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

Android应用使用DownloadManager下载文件一直处于队列中无法完成

Android DownloadManager 下载卡在队列中修复方案

核心原因及对应修复方法

1. 未指定网络类型触发系统默认限制

多数系统版本的DownloadManager默认仅允许WiFi环境下下载,若设备使用移动数据则任务会长期停留在队列中。
修复代码:

// 允许WiFi和移动数据场景下载
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
// 允许在计费网络环境下下载
request.setAllowedOverMetered(true);
// 根据需求配置是否允许漫游下载
request.setAllowedOverRoaming(false);

2. 未指定存储路径触发高版本系统分区存储限制

Android 10及以上版本执行分区存储规则,若未明确指定下载文件的存储路径,DownloadManager无法获得写入权限,会导致任务卡队列。
修复代码:

// 指定存储到公共下载目录,文件名为dummy.pdf,该路径无需申请额外存储权限
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "dummy.pdf");

3. 未设置资源MIME类型

部分系统的DownloadManager无法自动识别HTTPS链接的资源类型,会导致任务无法进入下载流程。
修复代码:

request.setMimeType("application/pdf");

4. 系统下载管理服务缓存异常

如果修改代码后问题仍存在,大概率是系统自带的DownloadManager服务队列拥堵或缓存异常,可按如下步骤修复:

  • 进入系统设置-应用管理,找到「下载管理」(部分系统显示为Download Manager)
  • 清空该应用的缓存与数据,重启设备后再测试下载

完整可运行代码示例

manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri = Uri.parse("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
// 新增修复配置
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverMetered(true);
request.setMimeType("application/pdf");
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "dummy.pdf");

long reference = manager.enqueue(request);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:05