转载:http://blog.csdn.net/sir_zeng/article/details/8983430
从Android 2.3(API level 9)开始,Android用系统服务(Service)的方式提供了Download Manager来优化处理长时间的下载操作。Download Manager处理HTTP连接并监控连接中的状态变化以及系统重启来确保每一个下载任务顺利完成。
在大多数涉及到下载的情况中使用Download Manager都是不错的选择,特别是当用户切换不同的应用以后下载需要在后台继续进行和当下载任务顺利完成非常重要的情况(DownloadManager对于断点续传功能支持很好)。
//获取下载管理器,使用getSystemService方法请求系统的DOWNLOAD_SERVICE服务
DownloadManager downloadManager = (DownloadManager)
getSystemService(Context.DOWNLOAD_SERVICE);
//要请求一个下载操作,需要创建一个DownloadManager.Request对象
//将要请求下载的文件的Uri传递给Download Manager
DownloadManager.Request request = new Request(Uri.parse(sportDetial[6]))
//还可以对Request进行设置
//设置下载文件保存的位置
.setDestinationUri(Uri.fromFile(videoFile))
//隐藏下载通知
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN)
/*设置VISIBILITY_HIDDEN属性需要权限
android.permission.DOWNLOAD_WITHOUT_NOTIFICATION*/
//设置允许下载的网络类型
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
|DownloadManager.Request.NETWORK_WIFI);
//将下载请求放入队列,返回系统为当前的下载请求分配的一个唯一的ID
//我们可以通过这个ID重新获得这个下载任务,进行一些自己想要进行的操作
//比如查询下载的状态以及取消下载等等
long downloadId = downloadManager.enqueue(request);
获取下载的进度
private int getDownloadPercent(long downloadId){
DownloadManager.Query query = new Query().setFilterById(downloadId);
Cursor c = downloadManager.query(query);
if(c.moveToFirst()){
int downloadBytesIdx = c.getColumnIndexOrThrow(
DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
int totalBytesIdx = c.getColumnIndexOrThrow(
DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
long totalBytes = c.getLong(totalBytesIdx);
long downloadBytes = c.getLong(downloadBytesIdx);
return (int) (downloadBytes * 100 / totalBytes);
}
return 0;
}