博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android网络编程之HttpUrlConnection的讲解--DownLoadManager基本用法
阅读量:6294 次
发布时间:2019-06-22

本文共 4435 字,大约阅读时间需要 14 分钟。

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

2、不要忘记添加权限

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作为参数。我们可以监听广播来进行下载后的操作。

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

转载于:https://www.cnblogs.com/begin1949/p/5060984.html

你可能感兴趣的文章
Java获取EXE文件图标的方法
查看>>
深入解析Django Admin模块
查看>>
SQL Server死锁详解
查看>>
电影剧本写作基础
查看>>
7.11 计算机基础
查看>>
虚拟机 liunx系统以 root 身份登录权限
查看>>
《当程序员的那些狗日日子》(五十一)太不给力的年终奖
查看>>
LeetCode(203): Remove Linked List Elements
查看>>
Join和Relate作用和区别
查看>>
mysql中的意向锁IS,IX
查看>>
CSS学习笔记02float
查看>>
python库的学习系列之 15. Generic Operating System Services
查看>>
使用excel进行数据挖掘(5)---- 应用场景分析
查看>>
【CSS】隐藏多行文本框Textarea在IE中的垂直滚动栏
查看>>
2017-2018-1 《信息安全系统设计基础》实验一报告
查看>>
2017-2018-1 20155303 《信息安全系统设计基础》第五周学习总结
查看>>
0314考试总结
查看>>
Jquery 文字模拟输入效果
查看>>
linux 下 `dirname $0`
查看>>
代理模式(C++)
查看>>