Android DownloadManager的用法

SunOne和AccessManager权限配置 SunOne和AccessManager权限配置 SunOne和AccessManager权限配置 立即下载

DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务.


一、直接操作Content Provider中的Downloads表实现!

    1:使用
         首先要在AndroidManifest.xml中申请访问DownloadManager的权限
          <permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
         添加一个下载任务:
         ContentValues values = new ContentValues();
         values.put(Downloads.URI, url);//指定下载地址
        values.put(Downloads.COOKIE_DATA, cookie);//如果下载Server需要cookie,设置cookie
        values.put(Downloads.VISIBILITY,Downloads.VISIBILITY_HIDDEN);//设置下载提示是否在屏幕顶部显示
        values.put(Downloads.NOTIFICATION_PACKAGE, getPackageName());//设置下载完成之后回调的包名
        values.put(Downloads.NOTIFICATION_CLASS, DownloadCompleteReceiver.class.getName());//设置下载完成之后负责接收的Receiver,这个类要继承BroadcastReceiver     
        values.put(Downloads.DESTINATION,save_path);//设置下载到的路径,这个需要在Receiver里自行处理
        values.put(Downloads.TITLE,title);//设置下载任务的名称
        this.getContentResolver().insert(Downloads.CONTENT_URI, values);//将其插入到DownloadManager的数据库中,数据库会触发修改事件,启动下载任务


   2:如何为DownloadManager设置代理,比如Wap
             values.put(Downloads.PROXY_HOST,"10.0.0.172");
            values.put(Downloads.PROXY_PORT,"80");


  3:如何在下载过程中监听下载任务
     可以通过监听数据库来实现
    DownloadsChangeObserver mDownloadObserver=new DownloadsChangeObserver(Downloads.CONTENT_URI);
    private class DownloadsChangeObserver extends ContentObserver {
        public DownloadsChangeObserver(Uri uri) {
            super(new Handler());
        }
        @Override
        public void onChange(boolean selfChange) {
            //查询需要监听的字段
           //比如要监听实时下载进度,查看当前下载状态:是否已经断开,或者下载失败等等
           StringBuilder wherequery = new StringBuilder(Downloads.TITLE);
            wherequery.append("=");
            wherequery.append("'");
            wherequery.append(mTitle);
            wherequery.append("'");

           mDownloadCursor =mContext.getContentResolver().query(Downloads.CONTENT_URI, new String[] {Downloads.TITLE, Downloads.STATUS, Downloads.CURRENT_BYTES,}, wherequery.toString(), null,orderBy);        
            int mSizeColunmId=mDownloadCursor.getColumnIndexOrThrow(Downloads.CURRENT_BYTES);   
           mDownloadCursor.moveToFirst();    
            int size=mDownloadCursor.getInt(mSizeColunmId);
       }
}
  4:如何删除下载记录
    private void deleteHistory(String title)//删除掉指定名称的下载记录
    { 
        StringBuilder whereDelete = new StringBuilder(Downloads.TITLE);
        whereDelete.append("=");
        whereDelete.append("'");
        whereDelete.append(str);
        whereDelete.append("'");
        this.getContentResolver().delete(Downloads.CONTENT_URI,whereDelete.toString(), null);

    }   


二、利用API提供的DownloadManager类实现(Since API 9):

  DownloadManger mgr=(DownloadManager)getSystemService(DOWNLOAD_SERVICE); 
  // 加入到下载队列:
    •  Request dwreq=new DownloadManager.Request(uri); 
    •  
    •         dwreq.setTitle("Demo"); 
    •         dwreq.setDescription("android-ndk-r6-linux-x86.tar.bz2"); 
    •         dwreq.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"android-ndk-r6-linux-x86.tar.bz2"); 
    •         dwreq.setNotificationVisibility(0);
    •         dwreq.setShowRunningNotification(true); 
    •  
    •         lastDownload=mgr.enqueue(dwreq); 

// 查询下载的状态


  • public void queryDownloadStatus(View v)  { 
  •  
  •       Runnable queryRunable = new Runnable() { 
  •           long totalsize=0; 
  •           long dowsize=0; 
  •           boolean downok=false; 
  •           Cursor c=null; 
  •  
  •         public void run() { 
  •  
  •             //查询下载文件总大小 
  •             totalsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); 
  •  
  •             Message msg_packsize=new Message(); 
  •             msg_packsize.what=MSG_DWPACKSIZE; 
  •             msg_packsize.arg1=(int) totalsize; 
  •             handler.sendMessage (msg_packsize); 
  •  
  •             while(downok==false){ 
  •                          c=mgr.query(new DownloadManager.Query().setFilterById(lastDownload)); 
  •  
  •                         if (c==null) { 
  •                             //tvdwsize.setText("query=null"); 
  •                         } 
  •                         else { 
  •                             c.moveToFirst(); 
  •                             //查询已经下载的大小 
  •                             dowsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); 
  •                             if(totalsize==dowsize) downok=true; 
  •                         } 
  •  
  •                         Message msg=new Message(); 
  •                         msg.what=MSG_DWSIZE; 
  •                         msg.arg1=(int) dowsize; 
  •                         handler.sendMessage (msg); 
  •  
  •                         try { 
  •                             Thread.sleep(5000); 
  •                         } catch (InterruptedException e) { 
  •                             // TODO Auto-generated catch block 
  •                             e.printStackTrace(); 
  •                         } 
  •                         c.close(); 
  •                 } 
  •             }//run 
  •         }; 
  •  
  •            Thread background = new Thread(queryRunable); 
  •            background.start(); 
  • } 
  •  
  •     public void delDownloads(View view) { 
  •  
  •         Toast.makeText(this, "delDownloads", Toast.LENGTH_LONG).show(); 
  •         mgr.remove(lastDownload); 
  •  
  •  
  •    }


Linux音频处理实战:从MP3解码到ALSA播放的完整流程解析 本文详细解析了Linux环境下从MP3文件解码到通过ALSA播放音频的完整实战流程。文章深入剖析了MP3文件结构、PCM原始音频数据格式,并提供了使用ffmpeg/mpg123解码、以及利用ALSA库进行C语言编程播放的实用代码示例,帮助开发者彻底掌握Linux音频处理的核心链路。 阅读详情

相关推荐

高通Camx架构调试不求人:手把手教你开UMD/KMD Log与Dump图像(附离线Log合成脚本)

本文详细介绍了高通Camx架构的调试方法,包括UMD/KMD Log的精准配置与图像Dump技术,帮助工程师快速定位移动影像系统中的问题。通过实战案例和自动化脚本,提升调试效率,适用于图像色彩异常、帧率波动等常见问题的诊断与解决。

weixin_30516243的博客 254

Android中的DownloadManager

DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务. 1:使用 首先要在AndroidManifest.xml中申请访问DownloadManager的权限 <permission android:name="android.permission.ACCESS_DOWNLOAD_M...

weixin_33744854的博客 311

QEMU+KVM实战:5分钟搞定Ubuntu 24.04虚拟机搭建(附性能优化技巧)

本文详细介绍了在Linux宿主机上使用QEMU和KVM快速搭建Ubuntu 24.04虚拟机的完整实战流程。内容涵盖从环境准备、核心组件解析到具体的安装命令,并重点分享了针对CPU、内存、存储I/O及网络性能的深度优化技巧,旨在帮助用户构建一个响应迅速、资源隔离良好的高性能虚拟化开发与测试环境。

j2k3l4的博客 754

downloadmanager

使用downloadmanager进行下载 权限 <!--网络通信权限--> <uses-permission android:name="android.permission.INTERNET"/> <!--DownloadManager使用权限--><uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" /> 主要代码如下: //创建下载任务,url

xianrenli38的博客 735

政务帮办新范式:基于检索增强与多智能体协同的智能系统实践

本文提出了一种多智能体协同的智能政务系统架构,突破传统方案在状态管理、职责过载和感知闭环方面的局限。系统由中央规划智能体、对话引导智能体、参数提取智能体和执行状态分析智能体组成,通过职责分离与显式状态管理实现高效协同。核心创新在于中央决策引擎的确定性逻辑,采用基于规则的状态机设计,确保系统可靠可控。该架构支持自然语言交互、参数自动提取、业务系统操作和视觉闭环验证,能够真正实现"帮办"功能,显著提升政务服务的智能化水平。

470

Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

yocto quick start up带大家快速上手

fulinux的博客 5万+

DownloadManager 的使用

一、基本概念    1、DownloadManager是Android 2.3A (API level 9) 引入的,基于http协议,用于处理长时间下载。     2、DownloadManager对于断点续传功能支持很好 。   二、权限设置(由于下载会需要SD卡存储,所以需要SD卡文件读写权限)   三、request.set

赵彦军 739

华为OD机试真题 新系统 2026-06-10 C++ 实现【设备重排SN】

通信设备SN一般是包含:字母、数字,用'-'(破折号)进行分组分割,例如:8F-3T-1G-2n是一个有效的SN地址。 现在要对已经存在的SN 按照新的规则进行重排:

MISAYAONE的博客 133

Android开发(22)使用DownloadManager下载文件

概述 使用DownloadManager 是个很好用的下载方式。它会出现在任务栏,指示当前的下载位置。它使用广播来接收完成消息,点击任务事件的交互。 实现步骤 1.添加权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:...

张云飞Vir的专栏 293

最新2026年《网络数据安全风险评估办法》条款解读

大型企业集团IT变革下的零信任安全体系建设方案(55页).pptx。以数据安全为核心的安全立体防御体系解决方案(41页).pptx。让数据安全合规地创造价值(15页 PPT).pptx。大型集团数据安全应急预案(57页).docx。数据安全治理与评估服务业务介绍.pptx。数据安全管理实践(17页).pptx。大数据安全架构设计方案.pptx。大数据安全规划总体方案.pptx。数据库安全综合治理方案.pptx。医疗数据安全建设方案.pptx。数据安全框架规划图.pptx。数据安全治理方案.pptx。

cdfunlove的博客 51

【基于CKF的IMM】CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附完整的matlab代码

该文章摘要: 本文提出了一种基于交互多模型(IMM)和容积卡尔曼滤波(CKF)的融合定位算法,用于解决目标在直线运动和转弯机动之间的模型切换问题。通过MATLAB仿真实现了IMM-CKF算法,并与单一的CV-CKF(匀速模型)和CT-CKF(匀角速转弯模型)方法进行对比。实验结果表明,在包含直线段和转弯段的复合轨迹跟踪中,IMM-CKF方法能够自适应调整模型权重,显著提高了定位精度。轨迹跟踪图、位置/速度误差对比图以及模型概率曲线直观展示了IMM算法的优势。文章提供了完整的MATLAB实现代码,可用于目标跟

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 616

android 自定义权限问题

读懂Android (1):使用Android内部的DownloadProvider下载文件,并获取cache权限   -- 未审核编辑文档<br />   收藏 <br />Android 内部提供了一个DownloadProvider,是一个非常完整的下载工具,提供了很好的外部接口可以被其他应用程序 调用,来完成下载工作。同时也提供和很好的下载、通知、存储等机制。<br /> 在Android的Browser等工具里面都用到了这个DownloadProvider。<br />但是很遗憾的是,这个D

Viktor的专栏 1686

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4760

Android DownloadManager 用法

Android DownloadManager 用法

gfuugff的博客 1421

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android系统自带更新DownloadManager用法

下载管理器是一个处理长时间运行的HTTP下载的系统服务,通过此API请求下载的应用程序应为ACTION_NOTIFICATION_CLICKED注册一个广播接收器,以便在用户单击通知中的正在运行的下载或从下载UI中正确处理。 此类的实例必须使用Context.getSystemService(Class),参数为DownloadManager.class或Context.getSystemService(String),参数为Context.DOWNLOAD_SERVICE。

James-Tom的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android系统自带更新DownloadManager用法- 用于系统 更新

Android系统自带更新DownloadManager用法- 用于系统 更新

a518618718的博客 961

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android网络编程之HttpUrlConnection的讲解--DownLoadManager基本用法

1、DownLoadManager是Android用系统服务(Service)的方式来优化处理长时间的下载操作的一个工具类。避免了我们去处理多线程,通知栏等等。 2、不要忘记添加权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name...

weixin_33994429的博客 91

Android问题分享:DownloadManager基本用法及发生java.lang.SecurityException异常的解决办法

骚年,你用过DownloadManager下载文件吗?什么?没有?那你就out了!本文主要讲述了DownloadManager的基本用法以及使用DownloadManager时产生异常java.lang.SecurityException的解决方法。

MichaelX的专栏 1万+

Android 2.3新增API - DownloadManager

DownloadManager下载管理类2.3新增API介绍 作者: Android开发网原创 时间: 2010-12-11   从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到。下载管理类可以长期处理多个HTTP下载任务,客户端只需要给出请求的Uri和存放目标文件的位置即可,下载管理使用了一个AI

Gabriel的专栏 5856

Android 2.3新增API - DownloadManager

DownloadManager下载管理类2.3新增API介绍 作者: Android开发网原创 时间: 2010-12-11   从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到。下载管理类可以长期处理多个HTTP下载任务,客户端只需要给出请求的Uri和存放目标文件的位置即可,下载管理使用了一个AI

a907763895的专栏 1603

使用DownloadManager进行应用下载

最近在做公司的应用下载功能,使用到的是系统提供的DownloadManager,正好抽时间做成一个模块。 关于DownloadManager 先来看一段官方的介绍: The download manager is a system service that handles long-running HTTP downloads. Clients may request that a ...

ww55555577的博客 478

DownloadManager--Android自带的下载工具

前言DownloadManager是Android2.3(API 9)提供的下载操作,其“处理Http/Https连接并监控连接中的状态变化及系统重启来确保每一个下载任务顺利完成”[1]。DownLoadManager对于后台下载、下载回调、失败重试、断点续传、文件操作等方面都有很好的支持,同时使用简便,对于开发者,在大多数的使用环境中,它都是一个很好的选择。使用DownloadManager有两个

陆羽_ 的简单生活 2839

DownloadManager Example

http://blog.vogella.com/2011/06/14/android-downloadmanager-example/

a907763895的专栏 964

DownloadManager补漏

原始完成于:2014-10-2420:01:03 DownloadManager是一个处理HTTP下载请求的系统服务: 1. 基本用法 1 private void download() { 2 Request request = new Request(Uri.parse("http://files.cnblogs.com/wlrhnh/JeejenKnow...

weixin_30386713的博客 146
上一篇: 访问android平台的通话记录CallLog
下一篇: Android使用ContentObserver监听数据库变化
shareCode
博客等级 码龄15年 125粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值