Android | DownloadManager下載任務(wù)管理器
DownloadManager介紹
DownloadManager是Android系統(tǒng)中的一個(gè)系統(tǒng)服務(wù),用于管理應(yīng)用程序的下載任務(wù)。它可以處理大文件的下載、斷點(diǎn)續(xù)傳、網(wǎng)絡(luò)狀態(tài)變化時(shí)的自動(dòng)恢復(fù)等功能。開發(fā)者可以通過DownloadManager提供的API來創(chuàng)建、查詢、暫停、恢復(fù)和取消下載任務(wù),從而更好地管理應(yīng)用程序中的下載操作。
DownloadManager常量
1. COLUMN_ID:下載項(xiàng)的ID
2. COLUMN_LOCAL_URI:下載文件的本地URI
3. COLUMN_MEDIA_TYPE:下載文件的媒體類型
4. COLUMN_STATUS:下載狀態(tài)
5. COLUMN_REASON:下載失敗的原因
6. COLUMN_TOTAL_SIZE_BYTES:下載文件的總大小
7. COLUMN_BYTES_DOWNLOADED_SO_FAR:已下載的文件大小
8. COLUMN_LAST_MODIFIED_TIMESTAMP:文件最后修改時(shí)間戳
9. COLUMN_TITLE:下載項(xiàng)的標(biāo)題
10. COLUMN_DESCRIPTION:下載項(xiàng)的描述
11. COLUMN_URI:下載文件的URI
12. COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI:下載項(xiàng)是否在下載管理器界面可見
13. COLUMN_FILE_NAME_HINT:下載文件的文件名提示
14. COLUMN_MEDIAPROVIDER_URI:下載文件在媒體提供程序中的URI
15. COLUMN_DESTINATION_URI:下載文件的目標(biāo)URI
16. COLUMN_VISIBILITY:下載項(xiàng)的可見性
17. COLUMN_ALLOWED_NETWORK_TYPES:允許的網(wǎng)絡(luò)類型
18. COLUMN_ALLOW_METERED:是否允許計(jì)量網(wǎng)絡(luò)下載
19. COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI:下載項(xiàng)是否在下載管理器界面可見
20. COLUMN_IS_DOWNLOADS_UI:下載項(xiàng)是否在下載管理器界面顯示
21. COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT:是否繞過推薦的大小限制
22. COLUMN_MEDIA_SCANNED:媒體是否已掃描
23. COLUMN_DELETED:下載項(xiàng)是否已刪除
24. COLUMN_ERROR_MSG:下載錯(cuò)誤消息
25. COLUMN_ALLOW_ROAMING:是否允許漫游下載
26. COLUMN_IS_PUBLIC_API:是否為公共API
27. COLUMN_COOKIE_DATA:cookie數(shù)據(jù)
28. COLUMN_USER_AGENT:用戶代理
29. COLUMN_REFERER:引用頁
30. COLUMN_TOTAL_BYTES:下載文件的總字節(jié)數(shù)
31. COLUMN_CURRENT_BYTES:當(dāng)前已下載的字節(jié)數(shù)
32. COLUMN_ETAG:下載文件的ETag
33. COLUMN_MEDIA_SCANNED:媒體是否已掃描
34. COLUMN_DELETED:下載項(xiàng)是否已刪除
35. COLUMN_ERROR_MSG:下載錯(cuò)誤消息
36. COLUMN_ALLOW_ROAMING:是否允許漫游下載
37. COLUMN_IS_PUBLIC_API:是否為公共API
38. COLUMN_COOKIE_DATA:cookie數(shù)據(jù)
39. COLUMN_USER_AGENT:用戶代理
40. COLUMN_REFERER:引用頁
41. COLUMN_TOTAL_BYTES:下載文件的總字節(jié)數(shù)
42. COLUMN_CURRENT_BYTES:當(dāng)前已下載的字節(jié)數(shù)
43. COLUMN_ETAG:下載文件的ETag
DownloadManager使用
使用DownloadManager來管理下載任務(wù),你需要首先獲取DownloadManager的實(shí)例,然后創(chuàng)建一個(gè)下載請求并將其提交給DownloadManager來處理。示例代碼:
// 獲取DownloadManager實(shí)例
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
// 創(chuàng)建下載請求
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("下載鏈接"));
request.setTitle("下載標(biāo)題");
request.setDescription("下載描述");
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "文件名");
// 將下載請求提交給DownloadManager
long downloadId = downloadManager.enqueue(request);
我們先獲取了DownloadManager的實(shí)例,然后創(chuàng)建了一個(gè)下載請求并設(shè)置了下載的標(biāo)題、描述以及文件保存的位置,最后將該下載請求提交給DownloadManager來處理。處理完成后,DownloadManager會(huì)返回一個(gè)唯一的下載ID,你可以使用這個(gè)ID來跟蹤下載任務(wù)的狀態(tài)或者取消下載任務(wù)。
// 查詢下載任務(wù)狀態(tài)
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));
// 根據(jù)狀態(tài)來處理下載任務(wù)
}
// 取消下載任務(wù)
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來查詢已經(jīng)下載完成的文件,并獲取了文件的狀態(tài)、本地URI、MIME類型和文件大小等信息。