广告
返回顶部
首页 > 资讯 > 精选 >DownloadManager如何实现文件下载功能
  • 340
分享到

DownloadManager如何实现文件下载功能

2023-05-30 16:05:56 340人浏览 泡泡鱼
摘要

这篇文章主要介绍了DownloadManager如何实现文件下载功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言    关于文件下载,或许

这篇文章主要介绍了DownloadManager如何实现文件下载功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前言

    关于文件下载,或许不是一个多么陌生的内容,在网络操作中下载只是其中一个方面,但是关于文件下载还是有不少东西要说,今天我就拿下载的方式来说吧。 

    文件下载有许多方式,比如什么多线程下载,单线程下载等等,我刚开始接触文件下载的时候是看了一个《关于文件多线程下载原理》的一个视频,里面讲了什么是多线程下载,然后就是自己写一个下载类,实现文件下载,虽然最后也是能够实现下载,但是效果并不是多么的好,有时候文件无法下载成功,那时候我就想应该有封装好的工具来帮助实现下载。确实,后来百度了一下,我找到许多的第三方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设置下载描述,示例图如下:

DownloadManager如何实现文件下载功能

    其中”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,这样我们实现了文件的下载和打开。

感谢你能够认真阅读完这篇文章,希望小编分享的“DownloadManager如何实现文件下载功能”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: DownloadManager如何实现文件下载功能

本文链接: https://www.lsjlt.com/news/219943.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • DownloadManager如何实现文件下载功能
    这篇文章主要介绍了DownloadManager如何实现文件下载功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言    关于文件下载,或许...
    99+
    2023-05-30
  • Android利用DownloadManager实现文件下载
    Android中文件下载,app更新,我们一般利用的都是 Retrofit或者 Okhttp等实现,但其实Android 早在API 9之后,就为我们提供了DownLoadManag...
    99+
    2022-11-12
  • 怎么在Android中利用DownloadManager实现一个文件下载功能
    本篇文章为大家展示了怎么在Android中利用DownloadManager实现一个文件下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android中DownloadManager实现文件下...
    99+
    2023-05-31
    android downloadmanager age
  • Android如何基于自带的DownloadManager实现下载功能
    这篇文章将为大家详细讲解有关Android如何基于自带的DownloadManager实现下载功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:DownloadManager.Request&n...
    99+
    2023-05-30
    android downloadmanager
  • Android中DownloadManager实现文件下载实例详解
    Android中DownloadManager实现文件下载 下载 创建下载链接 DownloadManager.Request request = new DownloadM...
    99+
    2022-06-06
    Android
  • SpringBoot如何实现文件下载功能
    这篇文章主要介绍“SpringBoot如何实现文件下载功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何实现文件下载功能”文章能帮助大家解决问题。1. 将文件以流的形式一次性...
    99+
    2023-07-05
  • django 实现文件下载功能
    在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。前端实现方式a标签+响应头信息<a ...
    99+
    2023-01-31
    功能 文件 django
  • iOS实现文件下载功能
    本文实例为大家分享了iOS实现文件下载的具体代码,供大家参考,具体内容如下 说明: 1).获取网络文件大小; 2).开启循环,计算每段position开始与结束位置,通过Range头...
    99+
    2022-11-13
  • Servlet实现文件下载功能
    本文实例为大家分享了Servlet实现文件下载的具体代码,供大家参考,具体内容如下把文件目录直接暴露给用户是很不安全的。所以要用Servlet来做,而且这样做,文件的存储方式就更丰富了,可以是从文件系统上取来的,也可以是数据库中经过计算生成...
    99+
    2023-05-30
    servlet 文件下载 实现文件
  • ThinkPHP5中如何实现文件下载功能
    这篇“ThinkPHP5中如何实现文件下载功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ThinkPHP5中如何实现文件...
    99+
    2023-07-05
  • ztree+ajax实现文件树下载功能
    基于java实现文件树下载,供大家参考,具体内容如下 0.项目准备工作 1.前端用到的插件库: ztree官网 2.后端maven依赖: <dependencies>...
    99+
    2022-11-12
  • java实现文件上传下载功能
    本文实例为大家分享了java实现文件上传下载的具体代码,供大家参考,具体内容如下 1.上传单个文件 Controller控制层 import java.io.File; imp...
    99+
    2022-11-12
  • SpringMVC实现文件上传下载功能
    目录导入需要的依赖包一、单个文件上传二、多个文件上传三、上传文件列表显示四、文件下载今天遇到文件上传的问题,使用Ajax方式进行提交,服务器一直报错The current reque...
    99+
    2022-11-13
  • Servlet实现代理文件下载功能
    用户向代理服务器发送请求,代理服务器从后端服务器上获取文件,并返回给用户web.xml:<servlet> <servlet-name>BigFile</servlet-name> <servl...
    99+
    2023-05-30
    servlet 下载 实现代理
  • Android如何实现下载m3u8视频文件功能
    本篇内容主要讲解“Android如何实现下载m3u8视频文件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何实现下载m3u8视频文件功能”吧!简介Aria下载器采用开源框架A...
    99+
    2023-07-05
  • SpringBoot如何实现文件上传与下载功能
    今天小编给大家分享一下SpringBoot如何实现文件上传与下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sprin...
    99+
    2023-07-02
  • Java FTP协议实现文件下载功能
    目录一、FTP协议二、文件上传1.连接服务器2.登录操作3.上传操作三、文件下载1.连接服务器2.登录操作3.下载操作四、总结一、FTP协议 ftp是(FileTransferPro...
    99+
    2022-11-13
    Java文件下载 Java FTP 文件下载 Java FTP协议
  • Android实现下载文件功能的方法
    本文所述为Android实现下载文件功能的完整示例代码,对于学习和研究android编程相信会有一定的帮助,尤其是对Android初学者有一定的借鉴价值。 完整功能代码如下: ...
    99+
    2022-06-06
    方法 Android
  • servlet实现文件上传与下载功能
    本文实例为大家分享了servlet实现文件上传与下载的具体代码,供大家参考,具体内容如下 内容 我们分两大模块来进行讲解,即上传的实现,与下载的实现 上传的实现 注意了我们在写上传表...
    99+
    2022-11-11
  • Vue实现文件上传和下载功能
    本文实例为大家分享了Vue实现文件上传和下载功能的具体代码,供大家参考,具体内容如下 1、a标签download属性 在H5中,为a标签新增了一个download属性,来直接文件的...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作