Ron*_*Ron 5 java android task-queue android-download-manager
我正在构建一个应用程序,出于所有并发原因,该应用程序需要了解所有下载是否均已完成。只有当我所有的下载完成后,才能启动某个功能。
我设法编写了一个检查队列中旧下载的函数:
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);
Run Code Online (Sandbox Code Playgroud)
问题是-可以肯定的是-在初始化时,我想清理队列并删除所有条目。
有什么想法我现在可以删除条目吗?
此功能对我不起作用,因为我不想物理删除文件...只需清空队列。
有任何想法吗?
您可以等待 DownloadManager 只完成您自己的下载吗?为了实现这一点,您可以使用如下方式保存下载的句柄:
List<Long> downloadIds = new ArrayList<>();
downloadIds.add(downloadManager.enqueue(request));
Run Code Online (Sandbox Code Playgroud)
然后你可以这样查询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();
Run Code Online (Sandbox Code Playgroud)
请记住,如果您只对自己的下载感兴趣,而不是对系统范围内可能发生的所有可能的下载感兴趣,则此方法可行。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3107 次 |
| 最近记录: |