热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

使用Android系统提供的DownloadManager来下载文件

在android2.3以后android系统提供了一个系统组件来供其他app调用来下载东西,使用起来非常方便。 例如我们可以拿来下载a

在android2.3以后android系统提供了一个系统组件来供其他app调用来下载东西,使用起来非常方便。

例如我们可以拿来下载app的新版本apk,同时在同时注册一个广播接收器来接收下载完成时DownloadManager发出的的广播,然后自动安装程序。

SDK在API Level 9中加入了DownloadManager服务,可以将长时间的下载任务交给系统,完全由系统管理。

直接看实例代码:

package com.hebaijun.downloadtest; 
 
import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 
 
import android.app.Activity; 
import android.app.DownloadManager; 
import android.app.DownloadManager.Request; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.util.Log; 
import android.webkit.MimeTypeMap; 
 
public class DownloadTestActivity extends Activity { 
  private DownloadManager downloadManager; 
  private SharedPreferences prefs; 
  private static final String DL_ID = "downloadId"; 
  /** Called when the activity is first created. */ 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); 
    prefs = PreferenceManager.getDefaultSharedPreferences(this);  
  } 
  @Override 
  protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    unregisterReceiver(receiver); 
  } 
  @Override 
  protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    if(!prefs.contains(DL_ID)) {  
      String url = "http://10.0.2.2/android/film/G3.mp4"; 
      //开始下载  
      Uri resource = Uri.parse(encodeGB(url));  
      DownloadManager.Request request = new DownloadManager.Request(resource);  
      request.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI);  
      request.setAllowedOverRoaming(false);  
      //设置文件类型 
      MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); 
      String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url)); 
      request.setMimeType(mimeString); 
      //在通知栏中显示  
      request.setShowRunningNotification(true); 
      request.setVisibleInDownloadsUi(true); 
      //sdcard的目录下的download文件夹 
      request.setDestinationInExternalPublicDir("/download/", "G3.mp4"); 
      request.setTitle("移动G3广告");  
      long id = downloadManager.enqueue(request);  
      //保存id  
      prefs.edit().putLong(DL_ID, id).commit();  
    } else {  
      //下载已经开始,检查状态 
      queryDownloadStatus();  
    }  
 
    registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
  } 
   
  /** 
   * 如果服务器不支持中文路径的情况下需要转换url的编码。 
   * @param string 
   * @return 
   */ 
  public String encodeGB(String string) 
  { 
    //转换中文编码 
    String split[] = string.split("/"); 
    for (int i = 1; i 

最后需要的权限是:



如果需要隐藏下载工具的提示和显示,修改代码:

request.setShowRunningNotification(false);
request.setVisibleInDownloadsUi(false);

加入下面的权限:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 开发笔记:小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表
    开发笔记:小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表 ... [详细]
  • Web App vs Native App:未来的移动应用趋势
    随着移动互联网的发展,Web App和Native App之间的竞争日益激烈。对于开发者而言,选择哪一种技术路径更为明智?本文将深入探讨两种应用模式的特点及未来趋势。 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
author-avatar
二狗子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有