如何检查文件是否在下载管理器队列中?

4

用户需要在按钮点击时下载多个文件。代码将检查文件是否已存在,如果不存在,则将其添加到下载队列中。我正在将所有不存在的文件添加到下载队列中。

但如果用户立即再次点击按钮,则文件将重新添加到下载队列中。那么如何检查文件是否已添加到下载管理器队列中?如果已添加,则文件不会被重新添加。


每次您请求下载时,都会返回一个唯一的ID。您可以存储这些ID,并稍后使用getUriForDownloadedFile检查文件是否已经在队列中。 - Oleg Bogdanov
“getUriFodDownloadedFile” 仅适用于已成功下载的文件。我想获取一个排队文件列表。 - suku
你总是可以维护它,对吧?反正它也不会让你访问其他应用程序下载的文件。 - Oleg Bogdanov
我需要存储URI并维护下载失败的列表等,需要在每次下载后更新它。如果用户转到其他活动,则这将变得很麻烦。由于下载管理器是系统服务,因此我认为不会有我所请求的这样的命令。 - suku
1个回答

5

您应该使用DownloadManager.Query

这里有一个示例可以参考Download manager example

示例代码

DownloadManager.Query query = null;
Cursor c = null;
DownloadManager downloadManager = null;
downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
query = new DownloadManager.Query();
 if(query!=null) {
            query.setFilterByStatus(DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PAUSED|DownloadManager.STATUS_SUCCESSFUL|
                    DownloadManager.STATUS_RUNNING|DownloadManager.STATUS_PENDING);
        } else {
            return;
        }
c = downloadManager.query(query);
if(c.moveToFirst()) { 
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); 
switch(status) { 
case DownloadManager.STATUS_PAUSED: 
break; 
case DownloadManager.STATUS_PENDING: 
break; 
case DownloadManager.STATUS_RUNNING: 
break; 
case DownloadManager.STATUS_SUCCESSFUL: 
break;  
}
}

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