`

【转】使用DownloadProvider来完成下载任务

 
阅读更多

   在同事在做一个自动更新的任务,也做得差不多,这里面有一个很重要的组成部分就是从网站上下载更新包的问题。这对于很多开发者来说,都不是什么大的问题, 网上也可以搜索出很多的源码出来进行下载,也就是用httpClient,方法很多,我这里就不说了,这里我要说的是利用2.3本身已经打开的 DownloadProvider这个API来进行下载,可以省掉我们写的很多代码,而且更加地专业,最重要的是,这个DownloadProvider 是可以实现断点续传功能的,在一些主要的应用里面也可以看到它的身影,如browser(浏览器)、market(市场)里面,都是调用了这个API,只 是在2.3之前,并没有公布这个API接口,所以要使用起来会比较麻烦,当然如果是内部开发者的话,就完全没有问题,只是要在 DownloadProvider的XML文件里面改一些权限就可以了,这里我就不细说了,我只说2.3的。

  其实,这个API的公布,网上也有很多的文章,但我发现,那些文章都是一样,并没有告诉你,怎么去用这个API,所以,我想着自己来写一个文章告诉大家怎样来用这个API。

  下面,我将详细讲解这个API:

  先要初始化一个DownloadManager对象

     DownloadManager manger=getSystemService(Context.DOWNLOAD_SERVICE) ;

    然后,定义DownloadManager.Request,这个对象,很简单

 

DownloadManager.Request down=new DownloadManager.Request (Url.parse(http://122.com/222.apk));

 里面是一个URL,为了简单,我就这样子写,大家都明白的

DownloadManager.Request  setShowRunningNotification(boolean show)  //是否显示下载进度的提示
DownloadManager.Request  setTitle(CharSequence title)  //设置notification的标题
DownloadManager.Request  setVisibleInDownloadsUi(boolean isVisible)  //设置下载管理类在处理过程中的界面是否显示

 DownloadManager.Request  setAllowedNetworkTypes(int flags)  //设置允许使用的网络类型,这一步Android 2.3做的很好,目前有两种定义分别为NETWORK_MOBILE和NETWORK_WIFI我们可以选择使用移动网络或Wifi方式来下载。
DownloadManager.Request  setAllowedOverRoaming(boolean allowed)  //对于下载,考虑到流量费用,这里是否允许使用漫游。
DownloadManager.Request  setDescription(CharSequence description)  //设置一个描述信息,主要是最终显示的notification提示,可以随便写个自己区别
DownloadManager.Request  setDestinationInExternalFilesDir(Context context, String dirType, String subPath)  //设置目标存储在外部目录,一般位置可以用 getExternalFilesDir()方法获取。
 setDestinationInExternalFilesDir这个方法,必须要重点讲,如果这个方法用得不好,很有可能就出现问题,

 dirType 这个参数是外部储存器下的一个目录,也就是SD卡下面的一个目录来的,如DCIM之类的,名字可以自己取,但必须是SD卡下的一个目录。

subpath这个参数是上面Url里面的,最后下载的文件的名字,如上面所述,这个参数应该为222.apk.

现在,实例化好了down,再加上一些自己想要的设置,记住setDestinationInExternalFilesDir这个方法,是必须要实现的,其他的自己选择,

 

 

 做到这一步,我们就可以来开始实现下载功能了。

   manger.enqueue(down);即开始下载

  很简单吧!!!

 

  可能大家会有疑问,不是说有断点续传的功能吗? 为什么我按照你的要求来做了,第二次开机没有续传呀,你是骗我们吗?

  说实话,我不是,我真的没骗大家,这个断点续传的功能,并不是由系统自己来完成,还需要我们自己去完成这个续传的功能,这样

由Downloadprovider才会知道我们要续传什么,然后才能够去实现这个续传的功能。

    还没写完呢,继续看哈

 

  要实现续传的功能,应该怎样去实现呢!很简单,只要在自己的应用里面,也写上一个数据库,然后在下载的过程中,通过一个间隔X秒的时间的服务去监听这个下 载数据库里面的数据,然后比较里面的总数据和当前总据,看是否相等,如果相等,则说明已经下载完成了,这种情况,我们就不做说明了,我们具体要说的是没有 下载完的情况。

  如果是没下载完,不相等,我们就必须要把这个数据库的内容,如DownProvider里面的数据ID,总大小,当前大小给记录到我们自己的数据库里面,以方便我们来进行续传的管理。

  举个例子,我们在下载一个东西的时候,突然之间,网断了,然后我们自己的服务就把当前的DownProvider里面的数据库里面的东西写到我们自己的数 据库里面去了,然后在下次开机的时候,我们也会首先打开这个服务,作用是查询自己的数据库里面,是否有未完成的下载,也就是当总大小不等于当前大小的时 候,

   这个时候,我们要做的事,就是把这个未完成的下载的数据的游标获取到,然后再从中得到我们想要知道的上一次关机前记录在数据库里面的 DownProvder的未完成下载数据记录的ID号,然后,我们就可以利用这个ID号,把这个ID号传回到我们在上面定义 的manger里面,即可完成续传的任务。

  现在比较忙,过两天,我会把具体怎么做发出来。。。

转:http://blog.csdn.net/poolwater/article/details/6916572

分享到:
评论

相关推荐

    使用DownloadProvider进行文件下载全攻略.pdf

    DownloadProvider 通过使用下载管理器来管理下载任务,并提供了很好的下载、通知、存储等机制。同时,DownloadProvider 也提供了外部接口,可以被其他应用程序调用以完成下载工作。 在使用 DownloadProvider 进行...

    安卓DownloadProvider下载文件

    使用`ACTION_VIEW`意图启动`DownloadProvider`,传递下载任务的URI。Android系统会自动识别并启动`DownloadManager`,进行后台下载。如果你需要自定义下载逻辑,可以扩展`DownloadManager.Request`,设置如文件保存...

    修改过的DownloadProvider-master

    5. **数据库管理**:`DownloadProvider`通常维护一个SQLite数据库来存储下载任务的元数据,如URL、文件名、下载状态、进度等。修改版可能对数据库结构或查询逻辑进行了优化。 6. **自定义下载路径**:`...

    Android DownloadProvider 源码详解

    本篇文章将深入探讨DownloadProvider的源码,理解其工作原理以及如何与其他组件协同完成下载任务。 首先,DownloadProvider的主要职责是管理下载请求,它封装了数据库操作,负责存储和查询下载任务的信息。这些信息...

    android 下载组件

    "DownloadProvider"通常是一个自定义的ContentProvider,它扩展了Android的内置ContentProvider类,专门用于处理下载任务的增删查改。ContentProvider是Android系统中用于数据共享的一种机制,通过URI接口提供服务。...

    android系统下载源码

    4. 当下载完成时,`DownloadProvider`更新数据库状态,并可触发通知提醒用户。 学习和分析`DownloadProvider`的源码可以帮助开发者深入理解Android系统如何处理文件下载,包括错误处理、存储管理和资源调度等。这...

    安卓内置APK程序中英文对照表-方便大家给系统瘦身.pdf

    42. **GoogleCheckinHelper.apk**: 谷歌签入助手 - 辅助GoogleCheckin完成相关任务。 43. **GoogleFeedback.apk**: 谷歌反馈 - 用户向Google发送应用使用反馈的工具。 44. **GooglePartnerSetup.apk**: 谷歌好友...

Global site tag (gtag.js) - Google Analytics