DownloadManager速查笔记

  • 内容
  • 评论
  • 相关

前言

DownloadManager是Android系统提供的下载工具,不过不支持断点续传以及暂停/继续,这一点不是很好,不过对于意见简单的下载场景还是比较实用的,所以本篇主要介绍下其简单用法。

使用DownloadManager进行下载

要想使用DownloadManager,首先得获取系统的DownloadManager服务,然后创建一个DownloadManager.Request对象进行设置,最后通过DownloadManager的enqueue方法将DownloadManager.Request对象加入下载队列,这样系统就会开始下载了,比较重要的是enqueue方法返回的id,通过这个id我们可以取消下载,获取下载任务的进度等。

DownloadManager.Request常用设置可以参考下面的代码注释。

取消下载

取消下载只需要使用enqueue方法返回的id即可取消下载,取消下载以后,临时文件会一并被删除。

监听任务栏的点击事件以及下载完毕事件

首先对于DownloadManager的下载任务来说,如果在通知栏显示,我们可以通过广播获取到通知栏的点击事件,可以实现类似点击通知栏停止下载的功能。对于下载完毕的广播,不仅仅是当下载完成以后会调用,当任务通过remove方法删除以后,也会发出下载完毕的广播。

对下载任务进行监听

首先我们得知道,DownloadManager的下载信息保存在/data/data/com.android.providers.downloads/databases/downloads.db中,由于系统提供了ContentProvider,所以我们可以通过ContentResolver以及ContentObserver去查询里面的数据以及观察其的变化。

这里为了方便,我将所有可以查询到的数据全部封装为一个类,大致如下

然后我们使用ContentObserver观察数据库的变化,就能随时了解下载状态以及下载进度了。

其他一下猜想

前面已经介绍了,系统下载信息是保存在/data/data/com.android.providers.downloads/databases/downloads.db中的,我们到处数据库,观察其结构,发现里面有部分字段可以标识是否正在下载等,那么是不是只要我们手动去设置这个值就可以控制下载/暂停了呢,下面给出测试代码。

不够分别测试了下,貌似可以暂停,但是继续下载会出现功能上的异常(UI上显示正在下载,但是实际没有开始下载),个人猜想是由于权限的问题,Android系统为了安全,可能不允许非系统应用的修改生效,不过也没有具体查看源码,纯属猜测

Demo地址:GitHub

评论

0条评论

发表评论

电子邮件地址不会被公开。