Android

来源:互联网 发布:mac 液体唇膏 试色 编辑:程序博客网 时间:2024/05/16 05:51

DownloadManger是android 2.3(api level 9)开始 提供的用于优化处理长时间的下载操作。DownloadManager 处理Http/Https连接并监控连接中的状态变化及系统重启来确保每一个下载任务顺利完成。大多数涉及到下载的情况中使用DownloadManager都是很好的选择,尤其是后台继续下载,下载状态回调,断点续传,下载环境设置,下载文件的操作等方面,支持的很好。

DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request。DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息。

要想使用Download Manager,使用getSystemService方法请求系统的DOWNLOAD_SERVICE服务,代码片段如下:

    DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);    downloadUrl = downloadMusic.getPath();    Uri resource = Uri.parse(downloadUrl);    DownloadManager.Request request = new DownloadManager.Request(resource);    // 设置使用移动网络和Wifi    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);    // 设置允许网络漫游    request.setAllowedOverRoaming(true);    // 设置文件类型--由文件扩展名得到mime类型    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();    String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(downloadUrl));    request.setMimeType(mimeString);    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);    request.setVisibleInDownloadsUi(false);    // sdcard的目录下的download文件夹    String musicName = downloadMusic.getMusciName() + "-" + downloadMusic.getAirtistName() + "-" + downloadMusic.getAlbumName() + ".m4a";    request.setDestinationInExternalPublicDir(MainActivity.this.getPackageName() + "/myDownLoadMusic", musicName);    downloadManager.enqueue(request);

可以对Request(下载项)进行属性设置,除了构造参数的URI必填,其他条件都是可选的,如下载的本地路径,下载后的重命名,下载通知的显示与不显示或者通知的样式,下载允许的网络类型,下载项的MimeType等。

request.setNotificationVisibility 可以用来控制什么时候显示Notification,甚至是隐藏该request的Notification 。

  1. Request.VISIBILITY_VISIBLE : 在下载进行的过程中,通知栏中会一直显示该下载的Notification,当下载完成时,该Notification会被移除,这是默认的参数值。
  2. Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED : 在下载过程中通知栏会一直显示该下载的Notification,在下载完成后该Notification会继续显示,直到用户点击该Notification或者消除该Notification。
  3. Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION : 只有在下载完成后该Notification才会被显示。
  4. Request.VISIBILITY_HIDDEN : 不显示该下载请求的Notification。如果要使用这个参数,需要在应用的清单文件中加上DOWNLOAD_WITHOUT_NOTIFICATION权限。

最后用public long enqueue(Request request)执行下载,返回downloadId,downloadId可用于后面查询下载信息。若网络不满足条件、Sdcard挂载中、超过最大并发数等异常会等待下载,正常则直接下载。

0 0
原创粉丝点击