1、DownLoadManager是Android用系统服务(Service)的方式来优化处理长时间的下载操作的一个工具类。避免了我们去处理多线程,通知栏等等。

2、不要忘记添加权限

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3、

public class MainActivity extends Activity {
private DownloadManager downloadManager; private long downloadId; private TextView mTvMsg; private String downId;
private String title;
private String address;
private String size;
private String sizeTotal; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
initData();
} private void initView(){
mTvMsg = (TextView) findViewById(R.id.tv_msg);
} private void initData(){
downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
String apkUrl = "http://img.meilishuo.net/css/images/AndroidShare/Meilishuo_3.6.1_10006.apk";
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(apkUrl)); // 设置下载地址为sd卡的Trinea文件夹,文件名为MeiLiShuo.apk
request.setDestinationInExternalPublicDir("aaaa", "MeiLiShuo.apk"); // 表示允许MediaScanner扫描到这个文件,默认不允许
request.allowScanningByMediaScanner(); // 设置下载中通知栏提示的标题
request.setTitle("MeiLiShuo"); // 设置下载中通知栏提示的介绍
request.setDescription("美丽说"); // 默认只显示下载中通知。VISIBILITY_VISIBLE_NOTIFY_COMPLETED表示下载完成后显示通知栏提示。VISIBILITY_HIDDEN表示不显示任何通知栏提示,
// 这个需要在AndroidMainfest中添加权限android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // 设置下载文件的mineType。因为下载管理Ui中点击某个已下载完成文件及下载完成点击通知栏提示都会根据mimeType去打开文件,
// 所以我们可以利用这个属性用于响应点击的打开文件
request.setMimeType("application/cn.trinea.download.file"); // 添加请求下载的网络链接的http头,比如User-Agent,gzip压缩等
// request.addRequestHeader(String header, String value) downloadId = downloadManager.enqueue(request); new Thread(thread).start();
} /** 查询下载任务信息*/
private void queryDownTask(DownloadManager downManager,long id) {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(id);
Cursor cursor= downManager.query(query); while(cursor.moveToNext()){
downId= cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_ID));
title = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE));
address = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
//String statuss = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
size= cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
sizeTotal = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
}
cursor.close();
} private Thread thread = new Thread(){
public void run() {
while (true) {
queryDownTask(downloadManager, downloadId); try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} handler.sendEmptyMessage(0);
}
};
}; private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what == 0){
mTvMsg.setText(downId + "\n" + title + "\n" + address + "\n" + size + "\n" + sizeTotal);
}
};
};
}

4、下载成功后系统会发出广播DownloadManager.ACTION_DOWNLOAD_COMPLETE,并传递并传递downloadId作为参数。我们可以监听广播来进行下载后的操作。

<!-- 注册系统静态广播接收器 -->
<receiver android:name=".DownloadReceive">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>
</receiver>
public class DownloadReceive extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); Toast.makeText(context, reference + "", Toast.LENGTH_SHORT).show();
} }

5、有了通知栏其实下载进度可以不用监听的,不过我们还是可以通过DownManager.Query和Cursor查询下载信息。

6、参考博文:http://www.open-open.com/lib/view/open1428024407365.html

android网络编程之HttpUrlConnection的讲解--DownLoadManager基本用法的更多相关文章

  1. android网络编程之HttpUrlConnection的讲解--实现文件的断点上传

    1.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android.permission.INTERNET"/& ...

  2. android网络编程之HttpUrlConnection的讲解--实现文件断点下载

    1.没有实现服务器端,下载地址为网上的一个下载链接. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...

  3. android网络编程之HttpUrlConnection的讲解--上传大文件

    1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...

  4. android网络编程之HttpUrlConnection的讲解--POST请求

    1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...

  5. android网络编程之HttpUrlConnection的讲解--GET请求

    1.服务器后台使用Servlet开发,这里不再介绍. 2.测试机通过局域网链接到服务器上,可以参考我的博客:http://www.cnblogs.com/begin1949/p/4905192.htm ...

  6. Android 网络编程之HttpURLConnection运用

    Android 网络编程之HttpURLConnection 利用HttpURLConnection对象,我们可以从网络中获取网页数据. 01 URL url = new URL("http ...

  7. android 网络编程之HttpURLConnection与HttpClient使用与封装

    1.写在前面     大部分andriod应用需要与服务器进行数据交互,HTTP.FTP.SMTP或者是直接基于SOCKET编程都可以进行数据交互,但是HTTP必然是使用最广泛的协议.     本文并 ...

  8. Android网络编程之HttpClient运用

    Android网络编程之HttpClient运用 在 Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们 ...

  9. Python网络编程之TCP套接字简单用法示例

    Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...

随机推荐

  1. IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

    http://www.cnblogs.com/tangbinblog/p/3898046.html

  2. SpringMVC的@ModelAttribute注解简单使用(用户修改信息)

    例如有一个User对象,我们要修改他的值,但是不能修改他的密码!通过表单提交数据之后,password为null,会把原对象的passwod覆盖掉.这时候可以用@ModelAttribute注解处理. ...

  3. jquery选择器之基本筛选选择

    1.基本选择器 2.内容筛选选择器 3.可见性筛选选择器 4.属性筛选选择器 5.子元素筛选选择器 6.表单元素选择器 7.表单对象属性筛选器

  4. 2014最热门、最具争议的10个Java话题

    Java 的哪些内容已在2014年死去,Java 的哪些变更又遭到整个Java社区的竭力反对?请随我们一起来回顾在2014年这个多事之秋中Java都发生了哪些变化,以及小伙伴们都在JAXenter热烈 ...

  5. Flood-it!

    Flood-it! 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4127/http://acm.split.hdu.edu.cn/showproble ...

  6. html5权威指南:客户端分区响应图

    客户端分区响应图:http://www.cnblogs.com/enjoymylift/p/5984338.html

  7. Access denied for user 'root'@'localhost' (using password:YES) 解决方案[转]

    关于昨天下午说的MySQL服务无法启动的问题,解决之后没有进入数据库,就直接关闭了电脑. 今早打开电脑,开始-运行 输入“mysql -uroot -pmyadmin”后出现以下错误: “Access ...

  8. 【解题报告】瑞士轮(NOIP2011普及组T3)

    [题外话:这道题吧……说实话我不太喜欢……因为卡快排.] 题目不贴了,就是给你一个赛制,然后各个选手的初始得分和能力值,问你进行R轮比赛之后第Q名的编号是多少(这个编号读进来就要算OYZ,初始快排的时 ...

  9. Java Object 构造方法的执行顺序

    Java Object 构造方法的执行顺序 @author ixenos 为了使用类而做的准备工作包括三个步骤 1)加载:类加载器查找字节码(一般在classpath中找),从字节码创建一个Class ...

  10. hdu_5900_QSC and Master(区间DP)

    题目链接:hdu_5900_QSC and Master 题意: 有n个数,每个数有个key值,有个val,如果相邻的两个数的key的gcd大于1那么就可以得到这两个数的val的和,现在问怎么取使得到 ...