android DownloadManager 的学习之路

    这几天由于公司项目需要,学习了DownloadManager下载管理器。由于公司自己写的下载类下载速度太慢,尽管使用了多线程下载,但是下载速度不尽人意。后来自己写了一个demo,使用了android自带的下载管理器DownloadManager.使用DownloadManager很简单的几行代码就搞定了。如下代码所示:


  String serviceString = Context.DOWNLOAD_SERVICE; 
        DownloadManager downloadManager; 
        downloadManager = (DownloadManager)getSystemService(serviceString); 
         
        Uri uri = Uri.parse("http://au.apk.umeng.com/uploads/apps/56f52012e0f55ad7c9001efc/_umeng_%40_20_%40_b721620b58c141c9dddd8c50c4a21c52.apk"); 
        DownloadManager.Request request = new Request(uri); 
        
        File saveFile = new File(Environment.getExternalStorageDirectory()+"/download.apk");
        
        request.setDestinationUri(Uri.fromFile(saveFile));
        request.setAllowedNetworkTypes(Request.NETWORK_WIFI); 
        request.setTitle("下载demo");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

        mReference = downloadManager.enqueue(request); 


如果需要侦听下载进度,或者获取其他下载信息,可根据以下代码来实现:

   int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));  //根据downloadManager.enqueue(request)返回的下载ID,从数据库查询下载状态。
  int reasonIdx = c.getColumnIndex(DownloadManager.COLUMN_REASON);    
  int titleIdx = c.getColumnIndex(DownloadManager.COLUMN_TITLE);    //查询下载标题 就是你setTitle的字符串
   int fileSizeIdx = c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);    / /  文件的总长度
   int bytesDLIdx =  c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);    //以下载的长度
   String title = c.getString(titleIdx);    
   int fileSize = c.getInt(fileSizeIdx);    
   int bytesDL = c.getInt(bytesDLIdx);    


   下载进度就是bytesDL / fileSize 。


可以根据自己的需要,设置是否需要在通知栏显示下载进度,也可以注册广播,侦听下载进度,和下载是否完成。


DownlaodManager的下载速度还是很快的,自此下载demo完成

这几天一直在测试下载的性能,在测试过程中发现一个问题。那就是DownloadManager 下载文件路径不能是app的私有目录。会报错。所以下载路径只能是Sd卡目录

另外一个,DownloadManager是在2.3系统之后才支持,低于2.3的会运行报错



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值