android网络编程之HttpUrlConnection的讲解--DownLoadManager基本用法
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基本用法的更多相关文章
- android网络编程之HttpUrlConnection的讲解--实现文件的断点上传
		1.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android.permission.INTERNET"/& ... 
- android网络编程之HttpUrlConnection的讲解--实现文件断点下载
		1.没有实现服务器端,下载地址为网上的一个下载链接. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ... 
- android网络编程之HttpUrlConnection的讲解--上传大文件
		1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ... 
- android网络编程之HttpUrlConnection的讲解--POST请求
		1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ... 
- android网络编程之HttpUrlConnection的讲解--GET请求
		1.服务器后台使用Servlet开发,这里不再介绍. 2.测试机通过局域网链接到服务器上,可以参考我的博客:http://www.cnblogs.com/begin1949/p/4905192.htm ... 
- Android 网络编程之HttpURLConnection运用
		Android 网络编程之HttpURLConnection 利用HttpURLConnection对象,我们可以从网络中获取网页数据. 01 URL url = new URL("http ... 
- android 网络编程之HttpURLConnection与HttpClient使用与封装
		1.写在前面 大部分andriod应用需要与服务器进行数据交互,HTTP.FTP.SMTP或者是直接基于SOCKET编程都可以进行数据交互,但是HTTP必然是使用最广泛的协议. 本文并 ... 
- Android网络编程之HttpClient运用
		Android网络编程之HttpClient运用 在 Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们 ... 
- Python网络编程之TCP套接字简单用法示例
		Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ... 
随机推荐
- EventBus消息机制在Eclipse环境下的使用
			1.在onStart()方法中注册 @Override public void onStart() { super.onStart(); // 注册 EventBus // 判断 Eventbus 是 ... 
- 《JavaScript高级程序设计》读书笔记 ---Function 类型
			说起来ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象.每个函数都是Function 类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对 ... 
- Android系统签名文件
			系统签名所需要的工具 signapk.jar -------------------->out/host/linux-x86/framework/signapk.jar (build/tools ... 
- IOS开发小技巧,知识点
			1.IOS模拟器第一次打开需要进入“设置”中关掉"Auto-Capitalization"选项. 2.NSInteger转化 NSString类型: [NSString strin ... 
- 【Shell】Linux中分区脚本
			后天要中期答辩了,今天只刷了一个题,还没写出来,但是想更新博客,所以只有把之前写的东西贴出来了. 一个用于分区的shell脚本 1 #!/bin/bash #指定脚本解释器路径 2 echo &quo ... 
- Java 反射 调用私有域和方法(setAccessible)
			Java 反射 调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了Acces ... 
- Android   onConfigurationChanged的作用
			API原文说明: android:configChangesLists configuration changes that the activity will handle itself. When ... 
- 【codevs】1860 最大数
			1860 最大数 题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 输入描述 Input Description 第一行一个正整数n. ... 
- 查看Android下生成的.db数据库
			1.在cmd中找到sdk中的platform-tools文件夹. 2.输入adb shell命令. 3.再输入sqlite3 /data/data/com.svs.db/databases/svs.d ... 
- Ztree手风琴效果(第三版)
			第一版:点击一级目录展开,再点击时不能收回 第二版:点击一级目录展开,再点击时可以收回 第三版:优化样式,修复主菜单下的子菜单下级无子节点时点击无反应问题(js报错) <%@ page lang ... 
