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

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

取消和删除下载
Download Manager的remove方法可以用来取消一个准备进行的下载,中止一个正在进行的下载,或者删除一个已经完成的下载。
remove方法接受若干个download 的ID作为参数,你可以设置一个或者几个你想要取消的下载的ID,如下代码段所示:

downloadManager.remove(REFERENCE_1, REFERENCE_2, REFERENCE_3);  
该方法返回成功取消的下载的个数,如果一个下载被取消了,所有相关联的文件,部分下载的文件和完全下载的文件都会被删除。
查询Download Manager
你可以通过查询Download Manager来获得下载任务的状态,进度,以及各种细节,通过query方法返回一个包含了下载任务细节的Cursor。
query方法传递一个DownloadManager.Query对象作为参数,通过DownloadManager.Query对象的setFilterById方法可以筛选我们希望查询的下载任务的ID。也可以使用setFilterByStatus方法筛选我们希望查询的某一种状态的下载任务,传递的参数是DownloadManager.STATUS_*常量,可以指定正在进行、暂停、失败、完成四种状态。
Download Manager包含了一系列COLUMN_*静态String常量,可以用来查询Cursor中的结果列索引。我们可以查询到下载任务的各种细节,包括状态,文件大小,已经下载的字节数,标题,描述,URI,本地文件名和URI,媒体类型以及Media Provider download URI。
下面的代码段是通过注册监听下载完成事件的广播接受者来查询下载完成文件的本地文件名和URI的实现方法:

@Override 
public void onReceive(Context context, Intent intent) { 
 long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 
 if (myDownloadReference == reference) { 
  
 Query myDownloadQuery = new Query(); 
 myDownloadQuery.setFilterById(reference); 
  
 Cursor myDownload = downloadManager.query(myDownloadQuery); 
 if (myDownload.moveToFirst()) { 
  int fileNameIdx = 
  myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME); 
  int fileUriIdx = 
  myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI); 
 
  String fileName = myDownload.getString(fileNameIdx); 
  String fileUri = myDownload.getString(fileUriIdx); 
  
  // TODO Do something with the file. 
  Log.d(TAG, fileName + " : " + fileUri); 
 } 
 myDownload.close(); 
 
 } 
} 

对于暂停和失败的下载,我们可以通过查询COLUMN_REASON列查询出原因的整数码。