DownloadManager获取当前下载进度

转载: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;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值