Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-下载管理器-清除队列中的旧下载_Java_Android_Task Queue_Android Download Manager - Fatal编程技术网

Java Android-下载管理器-清除队列中的旧下载

Java Android-下载管理器-清除队列中的旧下载,java,android,task-queue,android-download-manager,Java,Android,Task Queue,Android Download Manager,我正在构建一个应用程序,如果所有下载都完成了,出于并发原因需要知道。只有在我的所有下载完成后,才允许启动特定功能 我设法编写了一个函数来检查队列中是否有旧的下载: DownloadManager dm = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE); Query q = new Query(); q.setFilterByStatus(DownloadManager.STATUS_FA

我正在构建一个应用程序,如果所有下载都完成了,出于并发原因需要知道。只有在我的所有下载完成后,才允许启动特定功能

我设法编写了一个函数来检查队列中是否有旧的下载:

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);
问题是——只是为了确保——在初始化时,我希望清理队列并删除所有条目

你知道我现在如何删除这些条目吗

不适合我,因为我不想实际删除文件…只需清空队列


有什么想法吗?

如果您不想实际删除文件,可以在调用DownloadManager的删除功能之前对其进行备份。
这不是一个优雅的解决方案,但我找不到任何其他方法

您可以等待DownloadManager只完成您自己的下载吗? 要实现这一点,您可以使用以下方法保存下载句柄:

List<Long> downloadIds = new ArrayList<>();
downloadIds.add(downloadManager.enqueue(request));
List downloadId=new ArrayList();
downloadds.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();
Query q=newquery();
long[]ids=新的long[downloadds.size()];
int i=0;
对于(长id:downloadID)id[i++]=id;
q、 setFilterById(id);
游标c=downloadManager.query(q);
Set res=新的HashSet();
int columnStatus=c.getColumnIndex(DownloadManager.COLUMN\u状态);
while(c.moveToNext()){
int status=c.getInt(columnStatus);
如果(状态!=DownloadManager.status\u失败&&status!=DownloadManager.status\u成功){
//至少有一个下载正在进行
}
}
c、 close();
请记住,如果您只对自己的下载感兴趣,而不是对系统范围内可能发生的所有下载感兴趣,那么这种方法是可行的

希望这有帮助