zoukankan      html  css  js  c++  java
  • Android中的DownloadManager

    Android中的DownloadManager - cppguy - 博客园


    2009-07-09 17:19
    by
    cppguy,
    7120
    阅读,
    3
    评论,
    收藏,
    编辑

         DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务.
        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);
        }   
  • 相关阅读:
    POJ 3273 :Monthly Expense【二分+贪心】
    POJ 3104 Drying【二分】
    Codeforces Round #402 (Div. 2)
    PAT 天梯赛真题集
    PAT 乙级 (将剩下的做了)
    CCPC 2016-2017, Finals (慢慢做,慢慢更新)
    Spring注解开发
    SpringMVC+SSM框架
    Spring5 Framework(IOC+AOP+整合Mybatis事务)
    IDEA 使用小技巧
  • 原文地址:https://www.cnblogs.com/lexus/p/2797542.html
Copyright © 2011-2022 走看看