Android中使用DownloadManager类来管理数据下载的教程

2019-12-10 18:07:49丽君

对于STATUS_PAUSED状态的下载,可以通过DownloadManager.PAUSED_*静态常量来翻译出原因的整数码,进而判断出下载是由于等待网络连接还是等待WiFi连接还是准备重新下载三种原因而暂停。
对于STATUS_FAILED状态的下载,我们可以通过DownloadManager.ERROR_*来判断失败的原因,可能是错误码(失败原因)包括没有存储设备,
存储空间不足,重复的文件名,或者HTTP errors。
下面的代码是如何查询出当前所有的暂停的下载任务,提取出暂停的原因以及文件名称,下载标题以及当前进度的实现方法:

// Obtain the Download Manager Service. 
String serviceString = Context.DOWNLOAD_SERVICE; 
DownloadManager downloadManager; 
downloadManager = (DownloadManager)getSystemService(serviceString); 
 
// Create a query for paused downloads. 
Query pausedDownloadQuery = new Query(); 
pausedDownloadQuery.setFilterByStatus(DownloadManager.STATUS_PAUSED); 
 
// Query the Download Manager for paused downloads. 
Cursor pausedDownloads = downloadManager.query(pausedDownloadQuery); 
 
// Find the column indexes for the data we require. 
int reasonIdx = pausedDownloads.getColumnIndex(DownloadManager.COLUMN_REASON); 
int titleIdx = pausedDownloads.getColumnIndex(DownloadManager.COLUMN_TITLE); 
int fileSizeIdx = 
 pausedDownloads.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);  
int bytesDLIdx = 
 pausedDownloads.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR); 
 
// Iterate over the result Cursor. 
while (pausedDownloads.moveToNext()) { 
 // Extract the data we require from the Cursor. 
 String int fileSize = pausedDownloads.getInt(fileSizeIdx); 
 int bytesDL = pausedDownloads.getInt(bytesDLIdx); 
 
 // Translate the pause reason to friendly text. 
 int reason = pausedDownloads.getInt(reasonIdx); 
 String reasonString = "Unknown"; 
 switch (reason) { 
 case DownloadManager.PAUSED_QUEUED_FOR_WIFI : 
  reasonString = "Waiting for WiFi"; break; 
 case DownloadManager.PAUSED_WAITING_FOR_NETWORK : 
  reasonString = "Waiting for connectivity"; break; 
 case DownloadManager.PAUSED_WAITING_TO_RETRY : 
  reasonString = "Waiting to retry"; break; 
 default : break; 
 } 
 
 // Construct a status summary 
 StringBuilder sb = new StringBuilder(); 
 sb.append(title).append("n"); 
 sb.append(reasonString).append("n"); 
 sb.append("Downloaded ").append(bytesDL).append(" / " ).append(fileSize); 
 
 // Display the status 
 Log.d("DOWNLOAD", sb.toString()); 
} 
 
// Close the result Cursor. 
pausedDownloads.close();