簡述
DownloadManger是android 2.3(API 9)開始提供的系統(tǒng)服務灼伤,用于處理長時間的下載操作慈迈。應用場景是客戶端請求一個URL地址去下載一個目標文件。DownloadManger可以構建一個后臺下載服務手报,在發(fā)生故障或連接更改宽气、重新啟動系統(tǒng)等情況后,處理HTTP連接并重試下載逆趋。
主要的接口和類:
1盏阶、內部類DownloadManager.Query,這個類可以用于過濾DownloadManager的請求闻书。
2名斟、內部類DownloadManager.Request,這個類包含請求一個新下載連接的必要信息魄眉。
3砰盐、公共方法enqueue,在隊列中插入一個新的下載坑律。當連接正常
岩梳,并且DownloadManager準備執(zhí)行這個請求時,開始自動下載。返回結果是系統(tǒng)提供的唯一下載ID冀值,這個ID可以用于與這個下載相關的回調也物。
4、公共方法query列疗,用于查詢下載信息滑蚯。
5、公共方法remove抵栈,用于刪除下載告材,如果下載中則取消下載。同時會刪除下載文件和記錄古劲。
DownloadManager使用
String downLoadUrl = "";
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downLoadHtmlUrl));
//設置漫游條件下是否可以下載
request.setAllowedOverRoaming(false);
//在通知欄中顯示创葡,默認就是顯示的
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
//設置通知標題
request.setTitle("通知標題,隨意修改");
//設置通知標題message
request.setDescription("新版zip下載中...");
request.setVisibleInDownloadsUi(true);
//設置文件存放路徑
File file = new File(Environment.getExternalStorageDirectory(), "appCode.zip");
request.setDestinationUri(Uri.fromFile(file));
// pathstr = file.getAbsolutePath();
if (downloadManager == null)
downloadManager =(DownloadManager) MainActivity.this.getSystemService(Context.DOWNLOAD_SERVICE);
//將下載請求加入下載隊列绢慢,加入下載隊列后會給該任務返回一個long型的id,通過該id可以取消任務洛波,重啟任務胰舆、獲取下載的文件等等
if (downloadManager != null) {
downloadId = downloadManager.enqueue(request);
}
監(jiān)聽下載狀態(tài)和進度
1.通過廣播監(jiān)聽下載狀態(tài)
//廣播監(jiān)聽下載的各個狀態(tài)
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkStatus();
}
};
//檢查下載狀態(tài)
private void checkStatus() {
DownloadManager.Query query = new DownloadManager.Query();
//通過下載的id查找
query.setFilterById(downloadId);
Cursor cursor = downloadManager.query(query);
if (cursor.moveToFirst()) {
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
switch (status) {
//下載暫停
case DownloadManager.STATUS_PAUSED:
break;
//下載延遲
case DownloadManager.STATUS_PENDING:
break;
//正在下載
case DownloadManager.STATUS_RUNNING:
break;
//下載完成
case DownloadManager.STATUS_SUCCESSFUL:
//下載完成
cursor.close();
break;
//下載失敗
case DownloadManager.STATUS_FAILED:
cursor.close();
break;
}
}
}
2.注冊廣播
//注冊廣播監(jiān)測下載情況
MainActivity.this.registerReceiver(receiver,
new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));