`

【转】使用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. **自定义下载路径**:`...

    apk文件 DownloadProvider(电视直播视频)

    apk文件 DownloadProvider(电视直播视频)apk文件 DownloadProvider(电视直播视频)apk文件 DownloadProvider(电视直播视频)apk文件 DownloadProvider(电视直播视频)apk文件 DownloadProvider(电视直播视频)...

    DownloadProvider.apk

    DownloadProvider.apk

    Android DownloadProvider 源码详解

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

    DownloadProvider:Porting Android2.3 DownloadProvider .DownloadManager,can pause, resume downloading.断点续传下载

    Android平台面向开发者提供了DownloadManager这个服务(service),可以用来完成下载,同时异步地得到下载进度的实时更新提示。 原生的浏览器,Android Market以及GMail等客户端都使用了该接口。 该接口也部分的提供...

    com.xunlei.downloadprovider.apk

    com.xunlei.downloadprovider.apk

    android 下载组件

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

    android系统下载源码

    3. `DownloadService`负责实际的下载任务,监测网络状态,处理重试、暂停和恢复下载。 4. 当下载完成时,`DownloadProvider`更新数据库状态,并可触发通知提醒用户。 学习和分析`DownloadProvider`的源码可以帮助...

    Android download list

    - 使用SQLite数据库存储下载任务信息,以及`ContentProvider`的实现。 - 监听网络状态变化,动态调整下载策略。 - UI更新的最佳实践,如使用`LiveData`或`BroadcastReceiver`同步后台数据到UI。 - 文件保存路径的...

    ContentProvider

    ContentProvider的基本工作原理是通过 Uri(统一资源标识符)来定位数据,并且提供了增删查改(CRUD)操作的方法。开发者需要实现`ContentProvider`类,并覆盖其中的关键方法,如`query()`、`insert()`、`update()`...

    安卓ROM文件分析

    安卓系统文件夹及其主要文件详解 \system\app文件夹下是系统默认安装的软件 ...\system\app\Contacts.apk 联系人 \system\app\DownloadProvider.apk下载提供者 \system\app\DrmProvider. apk DRM数字版权提供

    安卓内置APK程序中英文对照表.pdf

    `DownloadProvider.apk`是下载管理器,删除后可能影响系统内下载管理,但使用第三方下载工具可以考虑删除。 `Dumplog.apk`用于生成系统错误报告,对普通用户来说可删除。 `Email.apk`是电子邮件应用,如果使用其他...

    N12豪华版刷机root优化全套教程

    | 15 | DownloadProvider | 下载提供 | 可 | 不使用谷歌市场的可以删除 | | 16 | DownloadProviderUi | 下载管理 | 可 | 不使用谷歌市场的可以删除 | | 17 | DrmProvider | DRM受保护数据存储服务 | 可 | 删除后暂无...

    Android代码-下载管理

    This project ports the DownloadProvider of Android 2.3.7. It supports Android 2.2 and above. It is standard Eclipse project, which could be open by Eclipse with the Andoird Development Tools. To ...

    电子市场所需应用程序

    所以还需安装 DownloadProvider.apk DownloadProviderUi.apk。如此便可基本使用电子市场了。但当应用程序出错,向电子市场发送错误报告时,电子市场会出错。所以不发送错误报告就好了。可以查找并下载应用程序就可以...

    安卓APK程序中英文对照表.docx

    3. **下载管理器** (DownloadProvider.apk, DownloadProviderUi.apk): 管理设备上的下载任务,允许用户下载并管理文件。 4. **DRM下载管理器** (DrmProvider.apk): 用于处理受版权保护的内容,如数字权限管理,确保...

Global site tag (gtag.js) - Google Analytics