原文地址:https://blog.stylingandroid.com/downloadmanager-part-3/
上一篇文章中,我们看了很多的设置,可以用来控制单个下载,在这篇文章中,我们将还会看到很多有趣的东西。
DownloadManager很重要的一点是他在UI上的表现,除了下载通知,还有下载应用程序,使用户可以查看和管理下载的文件,如果将下载的文件存储在自己的数据区域之外,如果软件被卸载的话,这些文件将不会被删除,如果使用DownloadManager执行下载,则下载的内容将自动被包含在下载应用程序中,在这里可以看一下我的测试结果。
如果执行独立的下载,仍然可以使用DownloadManager的addCompeletedDownload
将其添加到"下载"的应用程序中,此方法有两种变体,一种是API12中引入的,另一种是在API24中引入的,使用此机制进行独立下载时,要记住的一个重要的事情就是,必须将下载的内容存储在可公开访问的位置,不能将其存储在应用程序私人数据区。
在第一篇文章中我们可以看到当系在完成后, 我们可以通过DownloadManager来查询下载内容的MIME类型等信息,还有一些其他的字段,我们也可以获取到,比如说下载状态,下载内容的总大小等。
我们还可以调用getUriForDownloadedFile
来获取到下载的URI,我们可以使用Intent
来启动一个合适的查看器,当内容本身被下载到了一个应用程序的私人的数据存储和URI,我们看到一个内容模式,这意味着DownloadManager下载的文件可以通过ContentProvider可以暴露给外部程序。
值得考虑的是内容的适当的存储位置,不同的应用程序有不同的要求,所以没有唯一的答案,如果下载的内容相对较小,并且只会被应用程序自身使用的话,那么私有数据区是理想的选择,对于只有应用程序自身小号的较大的内容的话,外部存储上的私有数据区是最好的选择,这个不需要应用程序具有WRITE_EXTERNAL_STORAGE
权限。最后,如果内容要被公开的话,那么他们应该存储到外部公共存储,您需要WRITE_EXTERNAL_STORAGE
权限才能这么做。
要写入私有外部存储,请在请求对象上调用setDestinationInExternalFilesDir()
,写入的公共外部存储区域的话,调用setDestinationInExternalPublicDir()
。