热门标签 | 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在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 开发笔记:小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表
    开发笔记:小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表 ... [详细]
  • Web App vs Native App:未来的移动应用趋势
    随着移动互联网的发展,Web App和Native App之间的竞争日益激烈。对于开发者而言,选择哪一种技术路径更为明智?本文将深入探讨两种应用模式的特点及未来趋势。 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨了HTML5中十五个重要的新特性,为开发者提供了详细的指南。 ... [详细]
author-avatar
mobiledu2502858407
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有