Android DownloadManager的用法

转载 2012年03月30日 10:51:42

DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务.


一、直接操作Content Provider中的Downloads表实现!

    1:使用
         首先要在AndroidManifest.xml中申请访问DownloadManager的权限
          <permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
         添加一个下载任务:
         ContentValues values = new ContentValues();
         values.put(Downloads.URI, url);//指定下载地址
        values.put(Downloads.COOKIE_DATA, cookie);//如果下载Server需要cookie,设置cookie
        values.put(Downloads.VISIBILITY,Downloads.VISIBILITY_HIDDEN);//设置下载提示是否在屏幕顶部显示
        values.put(Downloads.NOTIFICATION_PACKAGE, getPackageName());//设置下载完成之后回调的包名
        values.put(Downloads.NOTIFICATION_CLASS, DownloadCompleteReceiver.class.getName());//设置下载完成之后负责接收的Receiver,这个类要继承BroadcastReceiver     
        values.put(Downloads.DESTINATION,save_path);//设置下载到的路径,这个需要在Receiver里自行处理
        values.put(Downloads.TITLE,title);//设置下载任务的名称
        this.getContentResolver().insert(Downloads.CONTENT_URI, values);//将其插入到DownloadManager的数据库中,数据库会触发修改事件,启动下载任务


   2:如何为DownloadManager设置代理,比如Wap
             values.put(Downloads.PROXY_HOST,"10.0.0.172");
            values.put(Downloads.PROXY_PORT,"80");


  3:如何在下载过程中监听下载任务
     可以通过监听数据库来实现
    DownloadsChangeObserver mDownloadObserver=new DownloadsChangeObserver(Downloads.CONTENT_URI);
    private class DownloadsChangeObserver extends ContentObserver {
        public DownloadsChangeObserver(Uri uri) {
            super(new Handler());
        }
        @Override
        public void onChange(boolean selfChange) {
            //查询需要监听的字段
           //比如要监听实时下载进度,查看当前下载状态:是否已经断开,或者下载失败等等
           StringBuilder wherequery = new StringBuilder(Downloads.TITLE);
            wherequery.append("=");
            wherequery.append("'");
            wherequery.append(mTitle);
            wherequery.append("'");

           mDownloadCursor =mContext.getContentResolver().query(Downloads.CONTENT_URI, new String[] {Downloads.TITLE, Downloads.STATUS, Downloads.CURRENT_BYTES,}, wherequery.toString(), null,orderBy);        
            int mSizeColunmId=mDownloadCursor.getColumnIndexOrThrow(Downloads.CURRENT_BYTES);   
           mDownloadCursor.moveToFirst();    
            int size=mDownloadCursor.getInt(mSizeColunmId);
       }

  4:如何删除下载记录
    private void deleteHistory(String title)//删除掉指定名称的下载记录
    { 
        StringBuilder whereDelete = new StringBuilder(Downloads.TITLE);
        whereDelete.append("=");
        whereDelete.append("'");
        whereDelete.append(str);
        whereDelete.append("'");
        this.getContentResolver().delete(Downloads.CONTENT_URI,whereDelete.toString(), null);

    }   


二、利用API提供的DownloadManager类实现(Since API 9):

  DownloadManger mgr=(DownloadManager)getSystemService(DOWNLOAD_SERVICE); 
  // 加入到下载队列:
 Request dwreq=new DownloadManager.Request(uri);          dwreq.setTitle("Demo");         dwreq.setDescription("android-ndk-r6-linux-x86.tar.bz2");         dwreq.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"android-ndk-r6-linux-x86.tar.bz2");         dwreq.setNotificationVisibility(0);         dwreq.setShowRunningNotification(true);          lastDownload=mgr.enqueue(dwreq);  

// 查询下载的状态


public void queryDownloadStatus(View v)  {        Runnable queryRunable = new Runnable() {           long totalsize=0          long dowsize=0          boolean downok=false          Cursor c=null         public void run() {              //查询下载文件总大小             totalsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));              Message msg_packsize=new Message();             msg_packsize.what=MSG_DWPACKSIZE            msg_packsize.arg1=(int) totalsize;             handler.sendMessage (msg_packsize);              while(downok==false){                          c=mgr.query(new DownloadManager.Query().setFilterById(lastDownload));                          if (c==null) {                             //tvdwsize.setText("query=null");                         }                         else {                             c.moveToFirst();                             //查询已经下载的大小                             dowsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));                             if(totalsize==dowsize) downok=true                        }                          Message msg=new Message();                         msg.what=MSG_DWSIZE                        msg.arg1=(int) dowsize;                         handler.sendMessage (msg);                          try {                             Thread.sleep(5000);                         } catch (InterruptedException e) {                             // TODO Auto-generated catch block                             e.printStackTrace();                         }                         c.close();                 }             }//run         };             Thread background = new Thread(queryRunable);            background.start();      public void delDownloads(View view) {          Toast.makeText(this"delDownloads", Toast.LENGTH_LONG).show();         mgr.remove(lastDownload);      } 



Android DownloadManager 用法

DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务.     1:使用          首先要在AndroidManifest.xm...
  • gf771115
  • gf771115
  • 2011年11月28日 12:15
  • 6857

使用Android内部的DownloadProvider下载文件,并获取cache权限

收藏 Android内部提供了一个DownloadProvider,是一个非常完整的下载工具,提供了很好的外部接口可以被其他应用程序调用,来完成下载工作。同时也提供和很好的下载、通知、存储等机制。在A...
  • bigapple88
  • bigapple88
  • 2011年06月02日 15:16
  • 9834

C#怎么实现文件下载功能的四种方法

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu...
  • wangnaisheng
  • wangnaisheng
  • 2014年06月19日 15:46
  • 9326

android开发(23)使用DownloadManager下载文件

使用DownloadManager 是个很好用的下载方式。它会出现在任务栏,指示当前的下载位置。它使用广播来接收完成消息,点击任务事件的交互。 让我们看看如何使用 1.添加权限 ...
  • dyllove98
  • dyllove98
  • 2013年04月23日 20:21
  • 6272

Android DownloadManager的用法

DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务. 一、直接操作Content Provider中的Downloads表实现!...
  • shareCode
  • shareCode
  • 2012年03月30日 10:51
  • 4144

Android 6.0 PKMS 构造 permission

PackageManagerService比较长,我们挑主要的内容讲,这是这个系列的第一篇博客,我们主要介绍下构造函数以及一些对象。 一、SystemServer创建PackageManagerS...
  • q1183345443
  • q1183345443
  • 2016年11月16日 16:14
  • 1464

Android DownloadManager下载进度查询(系列3)

 Android DownloadManager下载进度查询(系列3) 我在之前写了写一些关于Android DownloadManager 的文章: (系列1)《Android大数据、...
  • zhangphil
  • zhangphil
  • 2015年10月19日 12:37
  • 3703

Android-你还在用downloadmanager更新下载-out了!!!

轻松搞定下载MyDownloadManager 序言:      软件更新想必大家都用过,很多是用友盟的下载,但是也有自己公司服务器下载的处理方式,本文主要讲解的是自己下载的处理方法       ...
  • u014610664
  • u014610664
  • 2016年07月09日 16:12
  • 13375

使用Android内部的DownloadProvider下载文件,并获取cache权限

Android内部提供了一个DownloadProvider,是一个非常完整的下载工具,提供了很好的外部接口可以被其他应用程序调用,来完成下载工作。同时也提供和很好的下载、通知、存储等机制。 在An...
  • it_guang
  • it_guang
  • 2016年12月02日 14:02
  • 1156

我的Android进阶之旅------>如何获取系统中定义了那些权限

在Window控制台中输入如下命令可以看到Android系统中列出的所有权限(如果自定义权限注册成功,在这里也会找到这些自定义的权限) adb shell pm list permissions ...
  • qq446282412
  • qq446282412
  • 2015年07月17日 23:09
  • 4966
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android DownloadManager的用法
举报原因:
原因补充:

(最多只允许输入30个字)