说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

DownloadManager下载管理类2.3新增API介绍

HTML文档下载 WORD文档下载 PDF文档下载
DownloadManager下载管理类2.3新增API介绍

作者:Android开发网


  从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到。下载管理类可以长期处理多个HTTP下载任务,客户端只需要给出请求的Uri和存放目标文件的位置即可,下载管理使用了一个AIDL服务器所以可以放心的在后台执行,同时实例化的方法需要使用getSystemService(Context.DOWNLOAD_SERVICE) ,Android123再次提醒使用API Level为9的用户可以轻松的通过新增的这个API实现Android平台上的文件下载操作。

 DownloadManager类提供了以下几种方法来处理,

  long  enqueue(DownloadManager.Request request)   //存入队列一个新的下载项

 ParcelFileDescriptor  openDownloadedFile(long id)  //打开一个下载后的文件用于读取,参数中的long型id是一个provider中的一条记录。

Cursor  query(DownloadManager.Query query)  //查询一个下载,返回一个Cursor

int  remove(long... ids)  //取消下载同时移除这些条从下载管理中。

  我们可以看到提供的方法都比较简单,给我们操作的最终封装成为一个provider数据库的方式进行添加、查询和移除,但是对于查询和添加任务的细节,我们要看看DownloadManager.Request类和DownloadManager.Query 类了。

  一、DownloadManager.Request类的成员和定义

DownloadManager.Request  addRequestHeader(String header, String value)  // 添加一个Http请求报头,对于这两个参数,Android开发网给大家举个小例子,比如说User-Agent值可以为Android123或Windows XP等等了,主要是给服务器提供标识。
DownloadManager.Request  setAllowedNetworkTypes(int flags)  //设置允许使用的网络类型,这一步Android 2.3做的很好,目前有两种定义分别为NETWORK_MOBILE和NETWORK_WIFI我们可以选择使用移动网络或Wifi方式来下载。
DownloadManager.Request  setAllowedOverRoaming(boolean allowed)  //对于下载,考虑到流量费用,这里是否允许使用漫游。
DownloadManager.Request  setDescription(CharSequence description)  //设置一个描述信息,主要是最终显示的notification提示,可以随便写个自己区别
DownloadManager.Request  setDestinationInExternalFilesDir(Context context, String dirType, String subPath)  //设置目标存储在外部目录,一般位置可以用 getExternalFilesDir()方法获取。
DownloadManager.Request  setDestinationInExternalPublicDir(String dirType, String subPath)  //设置外部存储的公共目录,一般通过getExternalStoragePublicDirectory()方法获取。
DownloadManager.Request  setDestinationUri(Uri uri)  //设置需要下载目标的Uri,可以是http、ftp等等了。
DownloadManager.Request  setMimeType(String mimeType)  //设置mime类型,这里看服务器配置,一般国家化的都为utf-8编码。
DownloadManager.Request  setShowRunningNotification(boolean show)  //是否显示下载进度的提示
DownloadManager.Request  setTitle(CharSequence title)  //设置notification的标题
DownloadManager.Request  setVisibleInDownloadsUi(boolean isVisible)  //设置下载管理类在处理过程中的界面是否显示

  当然了Google还提供了一个简单的方法来实例化本类,这个构造方法为DownloadManager.Request(Uri uri) ,我们直接填写一个Uri即可,上面的设置使用默认情况。

 二、DownloadManager.Query类

  对于当前下载内容的状态,我们可以使用DownloadManager.Query类来获取,本类比较简单,仅仅提供了两个方法。

  DownloadManager.Query  setFilterById(long... ids)  //根据id来过滤查找。
  DownloadManager.Query  setFilterByStatus(int flags) //根据任务的状态来查找。

  详细的状态在android.app.DownloadManager类中有定义,目前Android 2.3中的定义为:

int STATUS_FAILED 失败
int STATUS_PAUSED 暂停
int STATUS_PENDING 等待将开始
int STATUS_RUNNING 正在处理中
int STATUS_SUCCESSFUL 已经下载成功

 最后Android开发网提醒大家要说的是因为DownloadManager类提供的query方法返回一个Cursor对象,这些状态保存在这个游标的COLUMN_STATUS 字段中。

  1. 下载的状态完成均是以广播的形式通知大家,目前API Level为9定义了下面三种Intent的action

  ACTION_DOWNLOAD_COMPLETE下载完成的动作。
  ACTION_NOTIFICATION_CLICKED 当用户单击notification中下载管理的某项时触发。
  ACTION_VIEW_DOWNLOADS 查看下载项

  2. 对于一个尚未完成的项,在Cursor中我们查找COLUMN_REASON字段,可能有以下定义:

int ERROR_CANNOT_RESUME 不能够继续,由于一些其他原因。
int ERROR_DEVICE_NOT_FOUND 外部存储设备没有找到,比如SD卡没有插入。
int ERROR_FILE_ALREADY_EXISTS 要下载的文件已经存在了,Android123提示下载管理类是不会覆盖已经存在的文件,所以如果需要重新下载,请先删除以前的文件。

int ERROR_FILE_ERROR 可能由于SD卡原因导致了文件错误。
int ERROR_HTTP_DATA_ERROR 在Http传输过程中出现了问题。
int ERROR_INSUFFICIENT_SPACE 由于SD卡空间不足造成的 

int ERROR_TOO_MANY_REDIRECTS 这个Http有太多的重定向,导致无法正常下载
int ERROR_UNHANDLED_HTTP_CODE 无法获取http出错的原因,比如说远程服务器没有响应。
int ERROR_UNKNOWN 未知的错误类型.

 3. 有关暂停的一些状态,同样COLUMN_REASON字段的值可能是以下定义

int PAUSED_QUEUED_FOR_WIFI 由于移动网络数据问题,等待WiFi连接能用后再重新进入下载队列。
int PAUSED_UNKNOWN 未知原因导致了任务下载的暂停.
int PAUSED_WAITING_FOR_NETWORK 可能由于没有网络连接而无法下载,等待有可用的网络连接恢复。.
int PAUSED_WAITING_TO_RETRY 由于重重原因导致下载暂停,等待重试。

  有关Android 2.3中新增的下载管理DownloadManager的介绍基本上已经完全讲完,如果你对Cursor、Provider这些基础概念了解的话,可以看到这个下载管理类可以帮我们减少很多不必要的代码编写。

盛大云业务重点转向自服务 转战中小型企业:Prediction API请求一个月内飙升至7亿多次 利用光子 耶鲁大学研究人员让量子计算机离现实更近一步 技术为王的云计算会让IT部门消亡么? 从Discuz到APP:安米移动社区转化工具 覆盖全领域:Google、Facebook、Twitter等大师的最佳推荐 苹果CEO宣布更改保修政策 并向中国用户道歉 拒绝使用现有Web组件的6个愚蠢理由 Github宣布支持SVN方式访问 iPad,正在改变什么? Go Mobile:行业大牛谈行业应用开发 亚马逊Cloud Drive新增文件同步功能 对抗Dropbox 35万奖金发放,BlackBerry 10大赛奖项揭晓 超越Google Apps:排行榜前10的相关云应用 荣耀终将消散 全球第一台千万亿次级超级计算机退役 谷歌已推免费Android和iPhone版Quickoffice,微软你呢? 用于响应式设计的9个CSS技巧 微软Surface Pro正式登陆中国市场 售价6588元起 岳雷:Windows Server 2012虚拟化性能提升巨大 陈健:Windows Server 2012让企业轻松管理IT 智能手机:革命已经波及到阴间 兄贵草泥马:重口味单机移动游戏为什么能火? 最炫HTML5框架Famo.us 将免费面向开发者 MySQL到NoSQL:数据的重思和查询方式的转换 程序员心髓:移动应用API设计10大技巧 Netflix公布个性化和推荐系统架构,3种类型作业通实时 从SendCloud到搜狐云 扎克伯格的败笔?Facebook Home可能无家可归 走进eico design,仰视设计师 乔布斯顾问承认苹果的命名糟透了 罗永浩:一百万年薪!招聘软件研发总监 假设我在dataGrid中的修改某一个单元格内容之后,焦点还没有离开,再去保存,就保存不了! 求助!!!鲁文易盘无法驱动,急!!!!!!!!!! 为什么只能用localhost访问? 还是烦人乱码问题~~JSP 连不上网。 人家说我有热情没天分,当不了程序员 中秋节给大家助助兴,小游戏一只,最终获胜的可获全部分数,100大分哦! 简单问题,急! 请教零长度问题(不好意思没分了救命啊) 请教零长度问题(不好意思没分了救命啊) sizeof的问题 今天的最近一问.... 写一个参数有默认值的函数出现的问题! 请教零长度问题(不好意思没分了救命啊) 有个关于可见性的问题,请指点, Delphi6中控制Excell2000的Chart的问题 看哪个地方出名人多 c++ 求学 (更上一层楼) 请教零长度问题(不好意思没分了救命啊) 高分寻求jtest4.5的破解 或注册方法 关于批量删除不同目录下相同文件的问题。 如何在VFP中运行VFP代码? 如何调用chm帮助文件? iptables问题 请教零长度问题(不好意思没分了救命啊) 大家來討論工作的問題 能用c语言编有关网络的程序吗?谢谢大侠们了:) 要在程序中控制在DBCHART显示不同颜色部分的内容及数值,如'34 丰田',来者有分? 提个建议:在祝福 璇玑大力 的贴子中,有不少的“名句妙词”,我们花点时间,搜集于一贴,同意的举手!(我的分数太紧张) 低级问题:如何把TFileStream中的一个字节读到一个byte变量中? 串口编程问题 jsp+mysql用的的resin服务器,运行一段时间,网站访问速度就很慢了,一般会是什么原因引起的呢? 两个字符串,前面是任意字符,后面必须是数字,怎么验证这两个字符串前面的字符是否一样? 怎么才能不关?? 祝大家中秋节快乐,进来帮小妹一把!关于JavaMail收邮件的问题! 一段列表筐代码不知道能不能短一些(请高手帮忙) 一个关于安装控件的问题? 请教SNMP的命令? Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 如何在formload时就确定TabControl1显示第3页?菜鸟提问 css的问题,如何使字体大一点??? 紧急求救 datagrid选中的颜色(我重新画了一个datagrid,设置颜色) 在access中如何控制查询 avg(某字段)的小数位数,比如要两位小数 如何起死回生 一道题目 做文件上传系统时,当上传较大容量的文件时如大于2M的文件时出差,请问是什么问题? 请教一个insert into select...语句的问题! 简单的问题,取出头n条记录的select语句怎么写? 谁可以介绍一下关于HMM(隐马可尔夫模型)方面的资料? 在windows2003下能上网,不能下载东西,为什么? 一个物体在一恒力作用下能否加速到光速? 重力场的作用无法超过光速传播吗?我错了,不是重力场,是引力场似乎质量的改变会立即影响到它对其他物体的引力大小。可是应该没有什么是超过光速传播的。《时间简史》上说,只要考 孩子读小学一年级,明天是读书节,老师让代表本班演讲,求关于“读书”题材的演讲稿、不要太长,内容精炼即可.谢谢大家 晏子使楚 “使”字怎么用1.晏子使楚2.使狗国者从狗门入3.使子为使4.齐使使各有所主5.使使贤主6.何为使子 法家主张什么? c 语言求序列中所有递增或递减子序列的个数并输出子序列【试题描述】输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数.【 法家的主张与思想 2oo字之内 在线等 求"我和你"为话题的1000~1500之间的作文或者写作思路也行急用, 二年级这个看图写画应拟什么题目? 二年级看图写画,100字左右. 《藤野先生》课后题第二大题第一小题.杂做 “甲壳虫”乐队主唱列侬儿时故居48万日本一男子弑母弃尸 藏尸冰箱月余终败日国会议员山本太郎向天皇递交书信 或韩国防部:暂不签署《韩日军事情报保护韩资料称日反韩示威3年激增10倍 口美华裔留学生派对后公寓猝死 疑酒精中日本“菜鸟”教师多:不会点火柴不敢拿纽约遭飓风袭击一周年 数千灾民仍无家法国两男子晚间持械抢劫 得价值70万泰辣椒酱工厂被指呛辣气味扰居民在美遭荷兰博物馆展出139幅珍贵油画 作品【活动名单】微信获赠VIP特权活动名内测首发 | 网易 Lofter 全在北京,有哪些不是景点但值得一去的地盘点:十大优势让4D打印成为新蓝海日本百货已基本完成蜕变转型,看看他们你所厌恶的八面玲珑,你所愤恨的不公平设计师集结令!2015渲云杯首届效果安卓版来袭 | 他们靠手来记忆 --千万别死捂着股票不放,卖股票六大好时亲子阅读|这些绝对不能错过的精彩绘本499元五彩电信机,TCL乐玩手机美心术卜正圣武境我在江湖的那些年大仙途神之试炼场异界之血域苍穹猫威公主网游之念力至高网游之破碎世界的主人幻神域不科学的契约兽愿生寺旅游朱自清故居旅游琼花观旅游狮子楼旅游龟山岛旅游杭州植物园旅游蓟门烟树碑旅游古观象台旅游詹天佑纪念馆旅游中国长城博物馆旅游金龙长城旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘