安卓开发入门之系统下载管理工具DownloadManager-第二部分(翻译)

来源:互联网 发布:qq音乐 for ubuntu 编辑:程序博客网 时间:2024/06/05 02:02

原文链接
https://blog.stylingandroid.com/downloadmanager-part-2/
安卓开发入门之系统下载管理工具DownloadManager-第一部分
http://blog.csdn.net/zhangxiangliang2/article/details/73691449
安卓开发入门之系统下载管理工具DownloadManager-第二部分
http://blog.csdn.net/zhangxiangliang2/article/details/73693134
安卓开发入门之系统下载管理工具DownloadManager-第三部分
http://blog.csdn.net/zhangxiangliang2/article/details/73695167
在上文《安卓开发入门之系统下载管理工具DownloadManager-第一部分》中,展示了使用DownloadManager来下载文件的详细过程。然而,还有许多细节值得我们去探索,本文将一 一展开。

我们首先看看系统通知栏的内容,它包括文件名和剩余时间。
通知栏

这是默认的通知栏,好看不?我也不知道,如果我们需要自定义通知栏,下面内容可看好了。

设置何时显示通知栏:在我们将DownloadManager.Request对象放入DownloadManager队列时调用setNotificationVisibility()方法(API11,API9调用setShowRunningNotification())。
如果我们获取了DOWNLOAD_WITHOUT_NOTIFICATION 权限,有可能禁止弹出下载通知栏。

设置显示的文件名:DownloadManager.Request. setTitle()
设置显示的描述内容:DownloadManager.Request.setDescription()
代码如下:

    void download(Uri uri) {        if (!isDownloading()) {            register();            DownloadManager.Request request = new DownloadManager.Request(uri);            request.setTitle("My hovercraft is full of eels");            request.setDescription("I am no longer infected");            downloadId = downloadManager.enqueue(request);        }    }

个人建议,最好不要设置描述内容,因为这会覆盖掉剩余时间的显示,后者往往更有价值。看看覆盖后的效果:
这里写图片描述

如果服务端需要指定的HTTP头,比如说SessionID,只需设置 DownloadManager.Request的addRequestHeader()方法。
如果下载的数据太大可能会影响用户设备的内存空间。DownloadManager.Request 的许多方法能够限制下载大小。默认设置是无限制,所以我们最好设置一个下载上限。
DownloadManager.Request的setAllowedOverRoaming()限制漫游下载。
DownloadManager.Request的setAllowedNetworkTypes()(API16以后调用setAllowedOverMetered())过滤掉特殊类型的网络。

设置下载的时候内容是否对操作系统可见。
将request放入队列之前调用DownloadManager.Request的allowScanningByMediaScanner()设置允许系统媒体扫描下载的内容。比如说,如果我们进行了该项设置,当我们下载完成一张图片以后并且媒体扫描器扫描之后,该图片会出现在系统相册里。

DownloadManager.Request的setVisibleInDownloadsUi()方法设置了下载内容和状态是否对系统自带的下载app可见。

最后,我们能够设置下载文件存到设备中的地方。默认下载存放到分配给我们app私有(正如我们上一篇文章中看到的尽管能够分享到其他app)的系统区域。这有一点不好就是当系统释放内存空间的会被系统删掉,为了避免被删掉可以调用setDestinationInExternalFilesDir(),该方法将下载内容存储到存储卡上属于我们app的私有区域,因为该区域对媒体扫描器不可见的。如果想设置下载的内容对媒体扫描器可见,调用setDestinationInExternalPublicDir()替代setDestinationInExternalFilesDir()方法,该方法将下载内容保存到存储卡的public区域。然而,将下载内容存储在存储卡的public区域(适用于系统的所有app)对于分享到其他app这点有影响。这点我们将在下一篇文章中讨论。

我们能对每一次下载进行设置,但是,我们仍然能够将一些通用的设置应用到所有的下载,我们将在下一篇文章中讨论。

源码下载
https://github.com/StylingAndroid/DownloadManager/tree/Part2

原文链接
https://blog.stylingandroid.com/downloadmanager-part-2/
安卓开发入门之系统下载管理工具DownloadManager-第一部分
http://blog.csdn.net/zhangxiangliang2/article/details/73691449
安卓开发入门之系统下载管理工具DownloadManager-第二部分
http://blog.csdn.net/zhangxiangliang2/article/details/73693134
安卓开发入门之系统下载管理工具DownloadManager-第三部分
http://blog.csdn.net/zhangxiangliang2/article/details/73695167

阅读全文
0 0
原创粉丝点击