Android - DownloadManager - 清空下载队列中的旧下载

6
我正在开发一个需要并发处理的应用程序,需要知道所有下载是否已完成。只有当所有下载完成后,某个特定的函数才能启动。
我已经写了一个函数来检查队列中是否有旧的下载:
DownloadManager dm = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE);

    Query q = new Query();
    q.setFilterByStatus(DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PENDING|DownloadManager.STATUS_RUNNING);

    Cursor c = dm.query(q);

问题在于 - 为了确保,我想在初始化时清理队列并删除所有条目。
有什么办法可以现在删除这些条目吗? 这个函数对我没有用,因为我不想物理删除文件...只是清空队列。
有什么想法吗?
2个回答

2

你能等待DownloadManager完成只有你自己的下载吗? 为了实现这一点,你可以像这样保存你的下载句柄:

List<Long> downloadIds = new ArrayList<>();
downloadIds.add(downloadManager.enqueue(request));

然后你可以通过以下方式查询downloadManager:
    Query q = new Query();
    long[] ids = new long[downloadIds.size()];
    int i = 0;
    for (Long id: downloadIds) ids[i++] = id;
    q.setFilterById(ids);
    Cursor c = downloadManager.query(q);
    Set<Long> res = new HashSet<>();
    int columnStatus = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
    while (c.moveToNext()) {
        int status = c.getInt(columnStatus);
        if (status != DownloadManager.STATUS_FAILED && status != DownloadManager.STATUS_SUCCESSFUL) {
            // There is at least one download in progress
        }
    }
    c.close();

请记住,这只适用于您仅对自己的下载感兴趣的情况,而不是系统范围内可能发生的所有可能下载。
希望这可以帮助您。

0

如果您不想物理删除文件,可以在调用DownloadManager的删除函数之前备份它们。 这不是一种优雅的解决方案,但我找不到其他方法


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接