Downloadmanager使用

DownloadManager是android提供的一个下载管理器

缺点:不支持断点续传

使用方法:

  1. 创建实例:

    DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
  2. 创建下载任务:

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(URL));//指定保存地址request.setDestinationInExternalPublicDir("chuyi", "meizhi.apk");//设置允许下载的网络状况request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);//设置通知栏的行为request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);//通过id唯一标识此下载任务long id = manager.enqueue(request);
  3. 删除下载任务:

    manager.remove(id);
  4. 查询下载任务:

    DownloadManager.Query query = new DownloadManager.Query();query.setFilterById(id);Cursor cursor = manager.query(query);if(cursor.moveToFirst()){    String filename = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));    String fileUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));    Toast.makeText(context,"下载完成...name:"+filename+",uri:"+fileUri,Toast.LENGTH_SHORT).show();}else {  //TODO}cursor.close();
  5. 查询下载进度:

    DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);Cursor c = null;try {    c = downloadManager.query(query);    if (c != null && c.moveToFirst()) {        int downloadedBytes = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));        int totalBytes = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));        int state = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));    }} finally {    if (c != null) {        c.close();    }}
  6. 监听下载结束通知:

    可以通过接收DownloadManager.ACTION_DOWNLOAD_COMPLETE广播来监听下载结束的通知

    IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);    mReceiver = new BroadcastReceiver(){      public void onReceive(Context c,Intent i){          long downId = i.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID,-1);      }    }    context.registerReceiver(mReceiver,filter);
  7. 监听下载进度:

    主要有三种方案:1.FileReceiver 2.ContentObserver 3.定时任务

    class DownloadChangeObserver extends ContentObserver {public DownloadChangeObserver(){    super(handler);}@Overridepublic void onChange(boolean selfChange) {    //查询进度}}//in activityprivate DownloadChangeObserver downloadObserver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.download_manager_demo);……downloadObserver = new DownloadChangeObserver();}@Overrideprotected void onResume() {    super.onResume();    /** observer download change **/    getContentResolver().registerContentObserver(DownloadManagerPro.CONTENT_URI, true,                                                 downloadObserver);}@Overrideprotected void onPause() {    super.onPause();    getContentResolver().unregisterContentObserver(downloadObserver);}

    上面这种做法可能对性能有些损耗,因为会不断触发onChange

    推荐使用ScheduledExecutorService

    public static ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);Runnable command = new Runnable() {    @Override    public void run() {        updateView();    }};scheduledExecutorService.scheduleAtFixedRate(command, 0, 3, TimeUnit.SECONDS);

    参考资料:

    1. http://www.trinea.cn/android/android-downloadmanager/
    2. http://www.trinea.cn/android/android-downloadmanager/
    3. https://github.com/Trinea/android-common/blob/master/src/cn/trinea/android/common/util/DownloadManagerPro.java

更多相关文章

  1. Android的ProgressBar以及自定义进度条
  2. Android最好看的圆形进度条ProgressBar
  3. 多线程实现更新android进度条。
  4. Android 各种自定义进度条Progressbar
  5. Android自带Music播放器更新播放时间和进度条的方法
  6. Android 5.1系统禁止通知状态栏下拉
  7. Android 下载文件至SD卡,并用progressBar显示下载进度
  8. Android 创建悬停通知栏
  9. Android下Notification(通知栏)的使用

随机推荐

  1. android 出错信息为:Class 'Anonymous cla
  2. Android Q fastboot刷GSI(MTK)
  3. Android EventBus的使用
  4. Android中调试获取Log
  5. Android实现网络图片查看器和网页源码查
  6. 对android 项目工程 sdk编译版本、build
  7. [Android][MMS][PDU]MMS PDU二进制信息解
  8. Android(安卓)ApiDemos示例解析(3): App-
  9. Android(安卓)Wear Eclipse开发环境搭建
  10. Android中实现Native与H5的通信方案汇总