Android中的下载管理器

时间:2016-02-01 20:11:53

标签: android queue android-download-manager

我正在开发一个杂志应用程序,我需要下载一个版本的杂志才能在离线模式下使用。一个版本可能有20篇文章。

我使用下载管理器下载文章,将所有文章排入队列,但在完成下载一个版本的所有文章时我需要回调。

如果我点击一下下载两本杂志,它会将两本杂志的所有文章排列在一起,我需要他们是个人的。

到目前为止,我有这个:

mDownloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
for (final Materia materia : materiasList) {
    String url = materia.url;
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setDescription("Baixando...");
    request.setTitle(mEditionTitle + " - " + materia.titulo);
    request.allowScanningByMediaScanner();
    request.setDestinationInExternalFilesDir(mContext, "/editions/" + String.valueOf(mEditionId) + File.separator, String.valueOf(materia.id) + ".html");
    // get download service and enqueue file
    mDownloadManager.enqueue(request);
}

编辑: 我是从服务中运行这个经理的。

1 个答案:

答案 0 :(得分:0)

不确定这是最佳解决方案,但您可以定期查询下载管理器并获取所有正在进行的下载。然后解析结果并检查它是否仍在下载集合中的某些项目或是否已全部下载。

查询经理:

ArrayList<QueuedDownload> downloads = new ArrayList<>();
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Query myDownloadQuery = new DownloadManager.Query();
myDownloadQuery.setFilterByStatus(DownloadManager.STATUS_RUNNING | DownloadManager.STATUS_PAUSED | DownloadManager.STATUS_PENDING);
Cursor cursor = downloadManager.query(myDownloadQuery);
while (cursor.moveToNext()) {
    // Parse each download
}
cursor.close();

当然应该在后台线程上运行。