1

Android | DownloadManager下载任务管理器

 9 months ago
source link: https://www.51cto.com/article/774407.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android | DownloadManager下载任务管理器

作者:Reathin 2023-11-24 08:21:08
我们先获取了DownloadManager的实例,然后创建了一个下载请求并设置了下载的标题、描述以及文件保存的位置,最后将该下载请求提交给DownloadManager来处理。

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类型和文件大小等信息。

责任编辑:武晓燕 来源: 沐雨花飞蝶

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK