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

Android Download Manager查询无结果,while循环未执行问题排查

问题根因
  • 核心错误是调用了错误的过滤API:setFilterById() 用于匹配你提交下载任务时系统返回的下载任务ID,不是用来过滤下载状态的,过滤状态需要调用 setFilterByStatus() 方法,所以你的查询条件完全不匹配,自然返回空结果。
  • 次要错误是Cursor遍历逻辑有误:先执行c.moveToFirst()后直接进入while(c.moveToNext()),会直接跳过第一条查询到的结果,就算有匹配的任务也可能漏判。
  • 额外注意:如果你的应用 targetSdk >= 26,需要保证申请了android.permission.DOWNLOAD_WITHOUT_NOTIFICATION权限,否则部分系统版本会查询不到其他应用提交的下载任务,自己应用提交的任务不受影响。
修复后的代码
// 检查文件是否在下载队列中
DownloadManager.Query q = new DownloadManager.Query();
// 用setFilterByStatus过滤下载状态,不要用setFilterById
q.setFilterByStatus(DownloadManager.STATUS_PAUSED|DownloadManager.STATUS_RUNNING|DownloadManager.STATUS_PENDING);
DownloadManager dm = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
Cursor c = dm.query(q);
file_exists = false;
// 调整遍历逻辑,避免漏第一条数据
if (c != null && c.moveToFirst()) {
    do {
        if("example-file-name.mp4".equals(c.getString(c.getColumnIndex(DownloadManager.COLUMN_TITLE)))){
            file_exists = true;
            holder.download_btn.setVisibility(View.GONE);
            holder.pgb_downloading.setVisibility(View.VISIBLE);
            break;
        }
    } while (c.moveToNext());
    c.close();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:01