DownloadManager实现文件下载

系统自带DownloadManager详解 前言:还在自己写downloadUtils吗?有了DownloadManger.你只需将UI画好,其他的事情,交给他来做就好了。简介:DownloadManager是android2.3以后,系统下载的方法,是处理长期运行的HTTP下载的系统服务。客户端可以请求的URI被下载到一个特定的目标文件。客户端将会在后台与http交互进行下载,或者在下载失败,或者连接改变,重新启动系统后重新下载。还可以进入 阅读详情

前言

    关于文件下载,或许不是一个多么陌生的内容,在网络操作中下载只是其中一个方面,但是关于文件下载还是有不少东西要说,今天我就拿下载的方式来说吧。
    文件下载有许多方式,比如什么多线程下载,单线程下载等等,我刚开始接触文件下载的时候是看了一个《关于文件多线程下载原理》的一个视频,里面讲了什么是多线程下载,然后就是自己写一个下载类,实现文件下载,虽然最后也是能够实现下载,但是效果并不是多么的好,有时候文件无法下载成功,那时候我就想应该有封装好的工具来帮助实现下载。确实,后来百度了一下,我找到许多的第三方jar包来实现下载,其中Afinal框架是我一直在用的,还不错。不想每一次都是用第三方的东西,android系统应该自己拥有下载的工具类,然后就是我们今天要讲的 DownloadManager了。
    接触DownloadManager是因为我前一段时间在写自己的一个音乐播放器,需要从网络获取歌曲并下载,这个时候我就想找一个简单是用的下载方式然后就认识了它,关于它的使用我还没做具体的深究,只是把它用在了自己的应用里面,现在写出来分享一下当时是怎么做的。

实现

    下载我主要关心三个方面的内容:

  • 从哪来
  • 到哪去
  • 完成之后的操作

    这三方面的内容就是最重要的,下面我就下载一首歌来进行说明:
    我们首先需要得到DownloadManager的一个实例,它既然是系统提供的服务,自然需要用getSystemService来得到了。
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    得到manager对象之后我们就需要一个下载请求,把下载的信息(也即“从哪来”,“到哪去”)设置进去。下载请求是DownloadManager的一个内部类Request,我们先生成Request的对象:DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));可以看到Request的一个构造函数传入的是一个Uri对象,我们调用Uri的静态方法来根据下载的Url得到一个Uri对象,这也就是我们说的”从哪来“。
    下面还有三个Request的三个方法需要我们调用:

  • setTitle(String title)
  • setDescription(String desc)
  • setNotificationVisibility(int flag)

    其中setTitle是设置下载的标题,setDescription设置下载描述,示例图如下:

这里写图片描述
    其中”Nobody“是标题,“WonderGirls”是描述。
    setNotificationVisibility方法就需要好好说说了,它的参数有四种情况:

  • Request.VISIBILITY_VISIBLE:
    在下载进行的过程中,通知栏中会一直显示该下载的Notification,当下载完成时,该Notification会被移除,这是默认的参数值。

  • Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED:
    在下载过程中通知栏会一直显示该下载的Notification,在下载完成后该Notification会继续显示,直到用户点击该Notification或者消除该Notification。

  • Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION:
    只有在下载完成后该Notification才会被显示。

  • Request.VISIBILITY_HIDDEN:
    不显示该下载请求的Notification。如果要使用这个参数,需要在应用的清单文件中加上DOWNLOAD_WITHOUT_NOTIFICATION权限。

    我们根据需要选择合适的参数,如果我们不希望下载的时候显示进度,那么我们就可以设置Request.VISIBILITY_HIDDEN,这样在下载的时候我们就看不到通知了,不过这样的坏处是我们就无法知道下载是否成功了。

    ”从哪来“的问题解决了,现在我们来看”到哪去“的问题:setDestinationUri这个函数用来设置下载路径,参数是一个Uri对象,使用如下:

    String path = "/storage/sdcard1/music/许嵩 - 幻听.mp3";
    File file = new File(path);
    Uri uri = Uri.fromFile(file);
    request.setDestinationUri(uri);

这样我们就设置好了下载的路径。
    Request设置好了之后我们就可以调用manager的方法开始下载了:
    manager.enqueue(request);这个方法就是把下载请求放到一个队列里面然后就开始下载,它有一个返回值,这个返回值是一个下载id,用来唯一标示这一次的下载,在下面我们会用到这个id,我们把它记为mDownloadID;

    最后就剩下载完成之后的情况了,下载完成之后我们可能还会有操作,比如下载完成之后打开文件等等,就像我们看到了一些软件进行升级,下载完成apk文件之后就直接打开安装,这都是下载完成之后的操作,那么该如何实现呢?

    原来DownloadManager在下载完成之后会发送一个广播,我们只需要注册一个广播接收器得到广播就可以进行我们自己的操作了。

IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
            if (mDownloadID == reference){
                Intent i = new Intent();
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.setAction(Intent.ACTION_VIEW);
                String type = "application/vnd.android.package-archive";
                i.setDataAndType(Uri.fromFile(file),type);
                mContext.startActivity(i);
            }
        }
    };
    mContext.registerReceiver(receiver, filter);

    这样我们就自己注册了一个广播接收器,用来接收下载完成之后发送的广播,接收到之后我们就直接打开文件,在代码中,我设置的是打开apk文件,即设置文件类型为”application/vnd.android.package-archive“,其中mDownloadID就是我们得到的那个下载ID,这样我们实现了文件的下载和打开。

小结

    这样看来文件下载并不是多么的复杂,当然我们只是站在用代码的角度,如果让我们自己去写下载源码,呵呵,无能为力了。

downloadmanage下载器,支持断点续传,可同时下载多个任务,并有通知栏显示 downloadmanage下载器,支持断点续传,可同时下载多个任务,并有通知栏显示,原本是github上别人的项目,不太好实用,经过修改解决了同时下载多个时通知栏出现闪烁,位置不固定,非常实用的下载器,已在项目中使用 立即下载

相关推荐

ApkUpdater:基于DownLoadManager实现安装包更新,可断点续传,自动续传,并缓存

ApkUpdater 基于DownLoadManager实现安装包更新,安装包缓存,支持MD5校验,支持断点续传,自定义UI,提供了默认UI。 演示 按照惯例还是先上图吧。 更新 3.1.0 优化升级逻辑,增加弱更新功能。 UpdateInfo接口移除了isForceUpdate的属性,改为updateType属性,其类型为UpdateType。UpdateType为枚举类型,共有以下3个类型: UpdateType.UPDATE_WEAK 弱更新,当更新类型为该类型时将会在默认的弹窗中出现忽略此版本的按钮,点击后默认会调用ApkUpdater.skipThisVersion()方法, 即表示直到下一个版本出现前不会再次自动提示。如果用户还想更新则可以通过手动更新的方式更新应用。设置手动更新的方式可参考ApkUpdater.check()方法。 UpdateType.UPDATE_NOR

Android DownloadManager 使用

Android DownloadManager 使用

u012514113的专栏 1万+

DGDownloadManager:下载的一个框架,支持断点续传、支持批量下载,支持ios和macOs,支持pod,可设置最大并发数量,可以暂停也可以恢复更可以取消。(A download framework supports breakpoint continuation, batch download, IOS and macOs, and pod. It can set the maximum number of concurrencies, pause or resume, and even ca

#DGDownloadManager 下载管理器,只要传递下载的url来进行下载,支持ios 和macos (Download Manager, as long as the URL passed to download download, support ios and macos) 下载管理器实现的功能:(Download Manager to achieve the function:) 支持断点续传 (Support HTTP) 支持最大的下载任务个数 (Support the largest number of download tasks) 传递url进行下载 (Pass url to download) 可以暂停全部 ( Pause all) 可以暂停某一链接 (Pause a link) 可以取消全部 (Cancel all) 可以取消某一链接 (Can

Android下载管理器DownloadManager

Android 从 2.3 (API9) 开始提供了专门的下载工具DownloadManager(下载管理器)统一管理下载操作。 下载管理器DownloadManager的对象从系统服务DOWNLOAD_SERVICE中获取,具体使用过程分为3步:构建下载请求(Request)、进行下载操作(DownloadManager)和查询下载进度(Query)。

m0_57150356的博客 6927

CsqDownloadManager:一个支持多任务、任务多线程、断点续传的下载管理器,适用于较大文件下载

CsqDownloadManager 概述 一个支持多任务、任务多线程、断点续传的下载管理器,适用于较大文件下载。minSdkVersion 9。 特点: 1、支持多个下载任务(默认最多3个)同时下载,如果任务支持断点续传,可以配置此任务多线程(1-6个,默认3个)下载,并支持任务暂停/恢复/删除等操作; 2、使用原生sql语句,不依赖其他组件,尽量减少方法数量; 3、数据库操作通过ContentProvider,其他应用也可以通过ContentProvider进行下载管理; 4、支持自定义下载事件分发器,默认通过广播分发,可以implements EventDispatcher实现其他事件分发。 #### 建议与反馈 作者能力有限,下载过程异常情况也特别多,暂时也还在测试验证阶段,所以可能有一些错误,如果大家有什么好的建议或者测试bug,欢迎反馈。 Email : ## 使用 **权限*

DownloadManager实现文件下载功能

主要为大家详细介绍了DownloadManager实现文件下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

java多线程文件下载_java多线程实现文件下载

本文实例为大家分享了java多线程实现文件下载的具体代码,供大家参考,具体内容如下1、DownloadManager类import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;impo...

weixin_34886207的博客 740

DEM边界数值爆炸?用ArcGIS空间分析工具链搞定异常值过滤全流程

本文针对DEM数据处理中常见的边界数值爆炸问题,提供了一套完整的ArcGIS空间分析解决方案。文章深入剖析了异常值产生的根源,并详细介绍了从诊断、定位到使用栅格计算器、重分类等工具进行精准过滤与修复的全流程工作流,帮助用户彻底解决由插值误差、数据拼接及坐标系转换引发的数值异常。

weixin_29269441的博客 148

Android 通过原生下载DownloadManager实现url下载文件

这种方式是调用了系统原生的下载DownloadManager 去传url去进行下载的。缺点就是如果遇到了 需要认证证书的网址,就比较麻烦。优点就是可以在原生apk 文件管理看到下载进度。需要在AndroidManifest.xml 中添加权限。

weixin_44128805的博客 2229

阿里云导出的镜像raw转换成vmdk格式工具

阿里云导出的镜像raw转换成vmdk格式工具 1.安装java环境,安装教程不介绍了 2.raw2vmdk软件下载: 在我的链接里面: 3.使用 打开cmd.bat软件: java -jar raw2vmdk.jar (原镜像)C:\\images\\raw\\disk.img (转换的镜像)D:\\images\\vmdk\\disk.vmdk 4.vmware打开vmdk文件 ...

3843

告别密码明文传输:手把手带你用Python实现SRP-6协议(附完整代码)

本文详细介绍了如何使用Python实现SRP-6协议,确保密码安全传输和存储。通过零知识证明与密钥交换技术,SRP协议在不传输明文密码的情况下完成认证,适用于金融App等高安全需求场景。文章包含完整代码示例和实战技巧,帮助开发者规避常见安全陷阱。

weixin_30689307的博客 412

android文件下载功能实现,Android中DownloadManager实现文件下载实例详解

Android中DownloadManager实现文件下载下载创建下载链接DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));设置允许下载的网络环境request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);WIFI网...

weixin_30782699的博客 2213

计组实验之四路表决器

请在之前四路表决器电路实现的基础上,继续用连接线 联接CD4511,将投票为1的票数总和显示到一个 LED上,思考如何做?由于我们需要通过显示字形来直接看出有几个1,在这里,我们最多有四个1,即显示字形最多到4就行,所以我们需要将有几个1用2进制数来表示,下面给出了相关电路图。显示输入插口,按真值表(自拟)要求,逐次改变输入变量, 测量相应的输出值,验证逻辑功能, 与表3-1 进行比较, 验证所设计的逻辑电路是否符合要求。用实验结果与真值表3-1和3-2进行比对,可以得出,我们实验结果是正确的。

szyugly的博客 1万+

Android 中 DownLoadManager 实现文件下载

关注微信号:javalearns   随时随地学Java 或扫一扫 随时随地学Java 一、问题概述 在android开发中,经常会使用到文件下载的功能,比如app版本更新等。在api level 9之后,android系统为我们提供了DownLoadManager类,这是android提供的系统服务,我们通过这个服务完成文件下载。整个下载过

720

LPDDR6 Efficiency Mode 技术探讨

LPDDR6 Efficiency Mode 技术探讨

zilan23的博客 1160

手把手教你学BSP(11.3)--BSP实例:基于Raspberry Pi 4 Model B的Linux BSP开发实例

通过以上步骤,我们完成了一个基于Raspberry Pi 4 Model B的Linux BSP开发过程,包括硬件初始化、设备驱动编写、Bootloader配置、内核配置和编译,以及最终映像的生成。每个步骤都非常重要,确保每一步都正确无误才能使整个系统正常运行。

MHD0815的博客 1011

Android利用DownloadManager实现文件下载

Android中文件下载,app更新,我们一般利用的都是 Retrofit或者 Okhttp等实现,但其实Android 早在API 9之后,就为我们提供了DownLoadManager,这是Android提供的系统服务,通过这个服务下载文件,整个过程全部交给了系统负责,免去了我们别的操作。 下面我们就来实地演示一下操作。 测试api sdk28, Android Studio3.4 小米...

petterp的博客 3652

Vue3 - 最新详细实现网站内部打开预览 office 全套附件,在页面弹窗内解析预览 word文档、excel电子表格、ppt演示文稿(docx|xlsx|pptx|pdf|txt等文件)完美兼容

vue3,nuxt3,下载预览,如何预览pdf文档,打开查看,office全套文档,实现在线预览文件,小程序内预览word文件,手机h5移动端网页,nuxt文档在线预览,预览office最好用的插件,office,文档,文件,查看预览,弹框预览,文档无法解析,打不开,报错,失效,保存下载,vue前端预览并下载doc、xls、pdf、txt及图片,下载查看,Office在线预览,vue-office,vue如何使用vue-office教程示例,word文档,ppt,exce表格,预览电子文件,vue在线预览

🏆 前端领域优质创作者 1万+

Android使用DownloadManager实现文件下载

Android使用DownloadManager实现文件下载Android使用DownloadManager实现文件下载 下载 创建下载链接 设置允许下载的网络环境 Notification显示下载进度 设置保存路径 下载 取消下载 下载完成的监听 Code 下载 广播接收者 注册 实现 下载创建下载链接DownloadManager.Request request = new DownloadMa

kongqw 1957

【云原生技术】sonar的官方web接口,获取质量阀结果的接口

以下是一个示例思路,说明如何调用 SonarQube 的质量阀查询接口并在前端展示“哪些条件没过”。假设前端使用 AJAX 或 fetch 从后端接口拿到 SonarQube 返回的 JSON(或直接前端请求 SonarQube API),前端再把解析结果展示给用户。测试覆盖率 (Coverage) 当前仅有 60%,未满足最低 80% 的要求,需要补充测试或优化以提升覆盖率。接口),就会返回相应的质量阀状态信息;里使用它来查询当前质量阀(质量门)的状态。,你用它即可获取该次分析的质量阀状态。

weixin_46453070的博客 1279

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

DownloadManager+Rxjava实现显示进度的文件下载

先看一下效果,有点问题是进度更新不够连续,通过query得到到的进度就这个屎样,几乎是按一秒一秒变的,我设置轮询的时间间隔是500毫秒,但是不顶用,跟1秒的效果一样: 说多了都是泪,话都在代码里。public class DownloadActivity extends AppCompatActivity implements View.OnClickListener { private

Kevins优快云的博客 3248

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用DownloadManager实现文件下载

 创建一个新工程LearnDownLoad   在androidManifest.xml文件中添加网络访问权限和sd读写权限   uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> us

牵手生活 1499

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android 下载的三种实现方式(文件流的读写方式下载,用DownloadManager下载,用管道的方式下载)

Android下载方式中,我用到的有三种实现方式 普通的下载方式,连接URL的InputStream一边读数据,一边写到Android的存储器里。用Android自带的DownloadManager实现下载。用管道的方式来实现下载。 下面先讲一下第一种实现方式: private void normalDownload(String strUrl){          URL

abcdefh123的专栏 4824

AniVu核心组件解析:DownloadManager如何实现高效文件下载

AniVu是一款一站式RSS订阅、BitTorrent下载和视频播放Android应用,采用MVI架构和Material You风格。其中DownloadManager作为核心组件,负责文件下载的调度与管理,是实现高效下载体验的关键。 ## DownloadManager的架构设计 DownloadManager采用跨平台设计,通过Kotlin多平台技术实现了Android、iOS和JVM平台

gitblog_02811的博客 491
上一篇: android中assets文件夹的使用<一>
下一篇: 关于java反射的那点事
潘建成
博客等级 码龄12年 139粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值