Android开发中,网络功能是必不可少的,其中很多时候我们还会用到文件下载。实现文件下载的方法很多,很多的第三方网络框架也都很容易的实现文件下载。这里给大家介绍系统自带的一个下载文件类DownLoadManager,它相比于其他的方法有几个优势:1.没有兼容问题。DownLoadManager在API 9时就开始支持了,所以不用担心在兼容问题。2.支持断点续传,大文件下载,自动支持通知栏进度显示。3.使用简单。
按照使用的习惯,首先来看看怎样使用
1 | String url="http://7xjrms.com1.z0.glb.clouddn.com/stream.mp4"; |
使用它就这么简单。先设置下载地址,添加请求,再设置保存文件的地址,最后获取下载服务,将请求添加到下载队列。
接下来再看看怎样扩展
通过看源码,我们可以看到DownLoadManager里面有两个内部类Request
和Query
。其中Request
我们之前已经用到过了,它主要就是用户网络请求的,而Query
则主要用于下载任务的查找等。
其它还有一些方法,我们简单来看看:
addCompletedDownload()
添加一个文件到下载数据库,这样可以在系统的下载中看到这个下载任务,也可以在通知栏中显示。
getMimeTypeForDownloadedFile()
根据id获取文件类型,如果下载成功,则返回下载文件的文件类型,如果不成功,则返回null。
getUriForDownloadedFile()
根据id获取文件的uri,失败返回null。
openDownloadedFile()
根据id打开已下载的文件。(我一直打不开。。。)
remove()
删除多个下载任务和相应的下载文件
enqueue()
添加下载任务
query()
添加查询任务
主要的方法就这些,这些方法主要还是对整个下载服务的管理,而具体对下载任务的设置主要在Request
中,接下来我们来看看Request
中的方法:
setDestinationUri()
setDestinationInExternalFilesDir()
setDestinationInExternalPublicDir()
这些方法是设置文件保存的位置
allowScanningByMediaScanner()
文件下载完后是否被媒体扫描(在添加请求前设置)
addRequestHeader()
添加请求头
setAllowedNetworkTypes()
设置下载允许的网络(可以设置为DownloadManager.Request.NETWORK_MOBILE,
DownloadManager.Request.NETWORK_WIF和DownloadManager.Request.
NETWORK_BLUETOOTH)默认情况下都可以
setAllowedOverMetered()
是否允许“计量式的网络连接”执行下载操作
setAllowedOverRoaming()
是否允许漫游状态下,执行下载操作
setMimeType()
设置下载文件的类型
setTitle()
设置通知的标题
setDescription()
设置通知的描述
setNotificationVisibility()
设置是否显示通知
setVisibleInDownloadsUi()
设置是否显示在系统下载列表中
这些方法,基本上完全满足了我们对于下载一个文件的需求。
同时,我们可以监听文件下载完成来进行后续的操作。DownLoadManager在文件现在完成时会发送一个action为ACTION_DOWNLOAD_COMPLETE的广播,所以我们可以注册BroadcastReceiver来监听:
1 | private class DownLoadCompleteReceiver extends BroadcastReceiver { |
获取下载信息
我们可以通过DownManager.Query对象来查询所有下载任务信息。
setFilterById(long… ids)
根据任务编号查询下载任务信息
setFilterByStatus(int flags)
根据下载状态查询下载任务
在这里我就不再展开了。