上篇文章android 系统下载 Download Manager(一)DownloadManager.Request讲完Request的创建的常用方法。
1.获取Download Manager对象
DownloadManager downloadManager= (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
2.将Request添加到downloadManager
//加入下载队列后会给该任务返回一个long型的id,
//通过该id可以取消任务,重启任务等等
long mTaskId = downloadManager.enqueue(request);Log.i(TAG, "downloadAPK: mTaskId" + mTaskId);
3.注册广播接收者,监听下载状态
下载完成后,下载管理会发出DownloadManager.ACTION_DOWNLOAD_COMPLETE这个广播,并传递downloadId作为参数。通过接受广播我们可以打开对下载完成的内容进行操作
//注册广播
mContext.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
下载完成时,发送的广播。
对应的Action为:ACTION_DOWNLOAD_COMPLETE
Notification被点击时发送的广播。
对应的Action为:ACTION_NOTIFICATION_CLICKED
查看所有下载情况的广播。
对应的Action为:ACTION_VIEW_DOWNLOADS
//广播接受者,接收下载状态
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkDownloadStatus();//检查下载状态
}
};
/检查下载状态
private void checkDownloadStatus() {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(mTaskId);//筛选下载任务,传入任务ID,可变参数
Cursor c = downloadManager.query(query);
if (c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
switch (status) {
case DownloadManager.STATUS_PAUSED:
MLog.i(">>>下载暂停");
case DownloadManager.STATUS_PENDING:
MLog.i(">>>下载延迟");
case DownloadManager.STATUS_RUNNING:
MLog.i(">>>正在下载");
break;
case DownloadManager.STATUS_SUCCESSFUL:
MLog.i(">>>下载完成");
break;
}
}
}