Android | DownloadManager下载任务管理器
创始人
2025-07-07 07:01:19
0

DownloadManager介绍

DownloadManager是Android系统中的一个系统服务,用于管理应用程序的下载任务。它可以处理大文件的下载、断点续传、网络状态变化时的自动恢复等功能。开发者可以通过DownloadManager提供的API来创建、查询、暂停、恢复和取消下载任务,从而更好地管理应用程序中的下载操作。

DownloadManager常量

1. COLUMN_ID:下载项的ID
2. COLUMN_LOCAL_URI:下载文件的本地URI
3. COLUMN_MEDIA_TYPE:下载文件的媒体类型
4. COLUMN_STATUS:下载状态
5. COLUMN_REASON:下载失败的原因
6. COLUMN_TOTAL_SIZE_BYTES:下载文件的总大小
7. COLUMN_BYTES_DOWNLOADED_SO_FAR:已下载的文件大小
8. COLUMN_LAST_MODIFIED_TIMESTAMP:文件最后修改时间戳
9. COLUMN_TITLE:下载项的标题
10. COLUMN_DESCRIPTION:下载项的描述
11. COLUMN_URI:下载文件的URI
12. COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI:下载项是否在下载管理器界面可见
13. COLUMN_FILE_NAME_HINT:下载文件的文件名提示
14. COLUMN_MEDIAPROVIDER_URI:下载文件在媒体提供程序中的URI
15. COLUMN_DESTINATION_URI:下载文件的目标URI
16. COLUMN_VISIBILITY:下载项的可见性
17. COLUMN_ALLOWED_NETWORK_TYPES:允许的网络类型
18. COLUMN_ALLOW_METERED:是否允许计量网络下载
19. COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI:下载项是否在下载管理器界面可见
20. COLUMN_IS_DOWNLOADS_UI:下载项是否在下载管理器界面显示
21. COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT:是否绕过推荐的大小限制
22. COLUMN_MEDIA_SCANNED:媒体是否已扫描
23. COLUMN_DELETED:下载项是否已删除
24. COLUMN_ERROR_MSG:下载错误消息
25. COLUMN_ALLOW_ROAMING:是否允许漫游下载
26. COLUMN_IS_PUBLIC_API:是否为公共API
27. COLUMN_COOKIE_DATA:cookie数据
28. COLUMN_USER_AGENT:用户代理
29. COLUMN_REFERER:引用页
30. COLUMN_TOTAL_BYTES:下载文件的总字节数
31. COLUMN_CURRENT_BYTES:当前已下载的字节数
32. COLUMN_ETAG:下载文件的ETag
33. COLUMN_MEDIA_SCANNED:媒体是否已扫描
34. COLUMN_DELETED:下载项是否已删除
35. COLUMN_ERROR_MSG:下载错误消息
36. COLUMN_ALLOW_ROAMING:是否允许漫游下载
37. COLUMN_IS_PUBLIC_API:是否为公共API
38. COLUMN_COOKIE_DATA:cookie数据
39. COLUMN_USER_AGENT:用户代理
40. COLUMN_REFERER:引用页
41. COLUMN_TOTAL_BYTES:下载文件的总字节数
42. COLUMN_CURRENT_BYTES:当前已下载的字节数
43. COLUMN_ETAG:下载文件的ETag

DownloadManager使用

使用DownloadManager来管理下载任务,你需要首先获取DownloadManager的实例,然后创建一个下载请求并将其提交给DownloadManager来处理。示例代码:

// 获取DownloadManager实例
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

// 创建下载请求
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("下载链接"));
request.setTitle("下载标题");
request.setDescription("下载描述");
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "文件名");

// 将下载请求提交给DownloadManager
long downloadId = downloadManager.enqueue(request);

我们先获取了DownloadManager的实例,然后创建了一个下载请求并设置了下载的标题、描述以及文件保存的位置,最后将该下载请求提交给DownloadManager来处理。处理完成后,DownloadManager会返回一个唯一的下载ID,你可以使用这个ID来跟踪下载任务的状态或者取消下载任务。

// 查询下载任务状态
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadId);
Cursor cursor = downloadManager.query(query);
if (cursor.moveToFirst()) {
    int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
    // 根据状态来处理下载任务
}

// 取消下载任务
downloadManager.remove(downloadId);

可以使用以下代码来查看文件下载情况:

DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL);

Cursor cursor = downloadManager.query(query);
if (cursor.moveToFirst()) {
    int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
    String localUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
    String mimeType = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_MEDIA_TYPE));
    long fileSize = cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
    // 在这里处理文件下载情况
}
cursor.close();

这段代码使用DownloadManager来查询已经下载完成的文件,并获取了文件的状态、本地URI、MIME类型和文件大小等信息。


相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...