前言
DownloadManager是Android2.3(API 9)提供的下载操作,其“处理Http/Https连接并监控连接中的状态变化及系统重启来确保每一个下载任务顺利完成”[1]。DownLoadManager对于后台下载、下载回调、失败重试、断点续传、文件操作等方面都有很好的支持,同时使用简便,对于开发者,在大多数的使用环境中,它都是一个很好的选择。
使用
DownloadManager有两个子类,Request和Query。
- Request类可以设置下载属性,诸如下载地址、文件类型等。
- Query类可以用来查询下载的相关信息,包括下载进度、下载文件地址等。
1.权限配置
DownloadManager的使用需要配置权限为
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.下载方法
DownloadManager mDownloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);//获取下载管理器服务的实例
DownloadManager.Request mRequest = new DownloadManager.Request(Uri.parse(url));//创建下载请求并传入下载地址
Long downID = mDownloadManager.enqueue(mRequest);//将下载请求加入下载队列, 返回一个下载ID
3.封装下载请求Request
mRequest.setDestinationInExternalPublicDir("/zhang_download/", url.substring(url.lastIndexOf("/")))// 指定下载路径
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE) // 指定可以在移动网络下下载
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) // 可以再wifi下下载
.setMimeType(mimeType) // 设定下载类型为apk
// .addRequestHeader("header", "value") //网络连接的http头
.setTitle("downloadManager下载...") // notification标题
.setDescription("<文件描述>") // notification标题描述
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // notification可见方式
3.1 设置文件下载位置
// 将文件保存在应用所在文件夹下的Download文件夹下,下载的文件会随着应用的卸载而删除
mRequest.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, "file.apk");
// 将文件保存在SD卡"zhang_download"文件夹下,这