一、Download模块简介

首先,Android Download模块主要由两个部分构成:DownloadManager以及DownloadProvider。
DownloadManager:在Android L/M源码位置:frameworks/base/core/java/android/app/DownloadManager.java作用:提供接口供三方apk调用
DownloadManager在Android L/M源码位置:packages/providers/DownloadProvider/作用:具体下载的实现,包括相关文件下载信息的保存以及文件的下载。
二、DownloadManager介绍

1、静态内部类

DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类 -DownloadManager.Query和DownloadManager.Request。

DownloadManager.Request用来请求一个下载
DownloadManager.Query 用来查询下载信息
2、主要方法

DownloadManager主要提供了一下主要方法:

enqueue(Request request):执行下载,返回downloadId,downloadId可用于查询下载信息。
remove(long ids):删除下载,若下载中取消下载。会同时删除下载文件和记录。
query(Query query)查询下载信息
getMaxBytesOverMobile(Context context)通过移动网络下载的最大字节数
getMimeTypeForDownloadedFile(long id)得到下载的mineType
三、DownloadProvider分析

1、DownloadManager主要类介绍

DownloadProvider:将下载信息insert到DB,启动下载服务类DownloadService
DownloadService:下载服务类,调用下载信息类DownlaodInfo,如果信息存在,则更新;否则,则新建该对象
DownloadInfo:下载信息类,启动下载线程类DownloadThread
DownloadThread:下载线程类,真正负责下载的线程,每次启动一个任务都会创建一个新的下载线程对象。进行下载前的过程检查、网络监测、路径检查等,保存文件……

例子

final DownloadManager dManager = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri = Uri.parse(“http://192.168.1.120:8080/mvp/com.goview.meineng_2.0.0_20.apk“);
//设置允许使用的网络类型,这里是移动网络和wifi都可以
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
//显示在下载界面,即下载后的文件在系统下载管理里显示
request.setVisibleInDownloadsUi(true);
//设置下载标题
request.setTitle(“meineng”);
//显示Notification
// request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// 设置下载路径和文件名
request.setDestinationInExternalPublicDir(“download”, “com.goview.meineng_2.0.0_20.apk”);
request.setDescription(“软件新版本下载”);
request.setMimeType(“application/vnd.android.package-archive”);
// 设置为可被媒体扫描器找到
request.allowScanningByMediaScanner();
// 获取此次下载的ID
final long refernece = dManager.enqueue(request);

    // 注册广播接收器,当下载完成时自动安装    IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);    BroadcastReceiver receiver = new BroadcastReceiver() {        public void onReceive(Context context, Intent intent) {            long myDwonloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);            if (refernece == myDwonloadID) {                Intent install = new Intent(Intent.ACTION_VIEW);                Uri downloadFileUri = dManager.getUriForDownloadedFile(refernece);                install.setDataAndType(downloadFileUri, "application/vnd.android.package-archive");                install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                startActivity(install);            }        }    };    getActivity().registerReceiver(receiver, filter);

可以静态注册一个广播

更多相关文章

  1. Android(安卓)AudioRecord 使用注意事项
  2. Android(安卓)获取通讯录联系人,打开通讯录获取联系人信息;整个流
  3. Android---58---初学GPS定位
  4. 在线升级Android应用程序完善版
  5. Android(安卓)handler src track
  6. Android(安卓)-HandleThread-给线程传参数
  7. Android(安卓)APK+Dex文件反编译及回编译工具
  8. Android(安卓)更新ProgressBar
  9. Android获取手机当前连接的WiFi信息(SSID,IP,连接状态)

随机推荐

  1. Nginx编译报错解决方法
  2. ceph-块设备部署
  3. postgresql12 流复制搭建
  4. postgresql备份与PITR恢复
  5. openGauss集群搭建
  6. 什么是自动化运维?为什么选择Python做自
  7. Midway Serverless 发布 2.0,一体化让前端
  8. 做人工智能适合学Python还是Java?入门分享
  9. EXCEL应用之商机分析:Smartbi助你抓住每个
  10. 话说 类加载过程 第一篇