下载功能是一个很常见的功能,在很多app中都有这种功能的存在。很多应用的做法是:写一个单线程或者多线程下载,写一个DownloadThread建立HTTP请求用来下载存储文件,存储到一个地方,然后写一个UI界面,用于展示文件列表。如果需求多了呢?加个控制,暂停、取消、重新下载、文件分类,再加上一些其他所谓的特定需求,加上数据库的操作管理会让你头大,况且下载功能,在很多细节方面还是需要处理很多的情况的(顺便说下,想看下载方面的深入研究,请看我的其他几篇博客)。
如果有一种方法,不用你写DownloadThread,不用你写HTTP请求,不用你写数据库,不用你自己操作控制,只需要你写一个界面,还能保证展示的内容是对的,BUG少,开发成本低,你会不会选择?
答案就是使用DownloadProvider来实现自己的下载管理功能。
大家可能对于DownloadProvider来说,都比较熟悉,app通过DownloadManager来进行下载文件,那么实际进行下载和管理文件的就是DownloadProvider,他的目录在packages/providers/DownloadProvider文件夹下面,那么我们怎么用这个DownloadProvider呢?
首先,在DownloadProvider里面有两个URI,一个是"content://downloads/my_downloads/"一个是"content://downloads/all_downloads/",其中"content://downloads/all_downloads/"是获取手机里面全部的下载资源数据,由于安全问题,这个是需要添加系统权限的,而一般app无法添加这种权限。而对于"content://downloads/my_downloads/",表示获取的是通过app本身进行下载的文件数据,这个无需系统权限,也就是说,通过这个uri可以获取到数据库(app本身下载的)内容,并进行增删改查以及下载控制。我们获取到了Cursor内容后,就可以把下载到的内容展示到界面上了,第一步完成。downloads.db中的字段很全,基本满足你想要的全部要求。
这里面有两点需要注意的:展示URI的数据,要同时满足两个条件:1.仅仅使用