android中DownloadManager实现版本更新,监听下载进度实例
2017-09-19 11:37
513 查看
DownloadManager简介
DownloadManager是Android 2.3(API level 9)用系统服务(Service)的方式提供了DownloadManager来处理长时间的下载操作。它包含两个静态内部类DownloadManager.Query(用来查询下载信息)和DownloadManager.Request(用来请求一个下载)。
DownloadManager主要提供了下面几个方法:
public long enqueue(Request request)把任务加入下载队列并返回downloadId,以便后面用于查询下载信息。若网络不满足条件、Sdcard挂载中、超过最大并发数等异常会等待下载,正常则直接下载。
public int remove(long… ids)删除下载,若取消下载,会同时删除下载文件和记录。
public Cursor query(Query query)查询下载信息,包括下载文件总大小,已经下载的大小以及下载状态等。
ContentObserver简介
public void ContentObserver(Handler handler) 所有ContentObserver的派生类都需要调用该构造方法,参数:handler Handler对象用于在主线程中修改UI。
public void onChange(boolean selfChange)当观察到的Uri中内容发生变化时,就会回调该方法。所有ContentObserver的派生类都需要重载该方法去处理逻辑。
观察特定Uri的步骤如下:
1、创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现。
2、为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理,调用registerContentObserver()方法去注册内容观察者。
3、由于ContentObserver的生命周期不同步于Activity和Service等。因此,在不需要时,需要手动的调用unregisterContentObserver()注销内容观察者。
效果图:
一:执行下载
下载配置
?
添加权限
?
二:监听下载进度
注册ContentObserver
三个参数分别是所要监听的Uri、false表示精确匹配此Uri,true表示可以匹配其派生的Uri、ContentObserver的派生类实例。
?
查询已下载数据大小
为了提高性能,在这里开启定时任务,每2秒去查询数据大小并发送到handle中更新UI。
?
Activity与Service通信
既然我们要在Activity中实时更新下载进度,那么就需要Activity绑定Service建立通信。
在Service中提供一个接口实时回调进度值。用isBindService来标识Activity是否绑定过Service,在调用bindService(ServiceConnection conn)方法时,如果绑定成功会返回true,否则返回false,只有返回true时才可以进行解绑,否则报错。
?
三:广播监听下载成功
下载完成,自动安装,记录APK存储路径
在下载成功后把APK存储路径保存到SP中,同时关闭定时器,开启apk安装界面。
?
四:善后处理
1、关闭定时器,线程
当收到下载完成的广播时立即停掉定时器,取消线程。
2、解绑Service,注销广播,注销ContentObserver
当Service解绑的时候,要把监听下载完成的广播和监听下载进度的ContentObserver注销。
3、删除APK
当应用安装成功后,再次启动就执行删除Apk操作。
?
五:具体应用
首先上传当前应用版本号给服务器,让服务器检查是否可以进行版本更新;如果可以进行版本更新,则绑定Service,开始下载APK,下载完成直接弹出安装界面,同时记录APK存储路径;待下次启动时,检查删除APK。
源码:DownloadManager_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
原文链接:http://www.jianshu.com/p/bb4cde6e88c6#
DownloadManager是Android 2.3(API level 9)用系统服务(Service)的方式提供了DownloadManager来处理长时间的下载操作。它包含两个静态内部类DownloadManager.Query(用来查询下载信息)和DownloadManager.Request(用来请求一个下载)。
DownloadManager主要提供了下面几个方法:
public long enqueue(Request request)把任务加入下载队列并返回downloadId,以便后面用于查询下载信息。若网络不满足条件、Sdcard挂载中、超过最大并发数等异常会等待下载,正常则直接下载。
public int remove(long… ids)删除下载,若取消下载,会同时删除下载文件和记录。
public Cursor query(Query query)查询下载信息,包括下载文件总大小,已经下载的大小以及下载状态等。
ContentObserver简介
public void ContentObserver(Handler handler) 所有ContentObserver的派生类都需要调用该构造方法,参数:handler Handler对象用于在主线程中修改UI。
public void onChange(boolean selfChange)当观察到的Uri中内容发生变化时,就会回调该方法。所有ContentObserver的派生类都需要重载该方法去处理逻辑。
观察特定Uri的步骤如下:
1、创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现。
2、为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理,调用registerContentObserver()方法去注册内容观察者。
3、由于ContentObserver的生命周期不同步于Activity和Service等。因此,在不需要时,需要手动的调用unregisterContentObserver()注销内容观察者。
效果图:
一:执行下载
下载配置
?
?
注册ContentObserver
三个参数分别是所要监听的Uri、false表示精确匹配此Uri,true表示可以匹配其派生的Uri、ContentObserver的派生类实例。
?
为了提高性能,在这里开启定时任务,每2秒去查询数据大小并发送到handle中更新UI。
?
既然我们要在Activity中实时更新下载进度,那么就需要Activity绑定Service建立通信。
在Service中提供一个接口实时回调进度值。用isBindService来标识Activity是否绑定过Service,在调用bindService(ServiceConnection conn)方法时,如果绑定成功会返回true,否则返回false,只有返回true时才可以进行解绑,否则报错。
?
下载完成,自动安装,记录APK存储路径
在下载成功后把APK存储路径保存到SP中,同时关闭定时器,开启apk安装界面。
?
1、关闭定时器,线程
当收到下载完成的广播时立即停掉定时器,取消线程。
2、解绑Service,注销广播,注销ContentObserver
当Service解绑的时候,要把监听下载完成的广播和监听下载进度的ContentObserver注销。
3、删除APK
当应用安装成功后,再次启动就执行删除Apk操作。
?
首先上传当前应用版本号给服务器,让服务器检查是否可以进行版本更新;如果可以进行版本更新,则绑定Service,开始下载APK,下载完成直接弹出安装界面,同时记录APK存储路径;待下次启动时,检查删除APK。
源码:DownloadManager_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
原文链接:http://www.jianshu.com/p/bb4cde6e88c6#
相关文章推荐
- android中DownloadManager实现版本更新,监听下载进度实例
- Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!
- Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!
- android通过service实现更新并显示下载进度条,最后自动安装实例
- Android实现版本更新通知栏下载
- Android中使用AsyncTask实现文件下载以及进度更新提示
- Android中使用Notification实现应用更新显示下载进度
- Android提示版本更新+notification显示下载进度
- Decloud实现Android和iOS热更新,下载更新文件进度条
- Android 使用 DowanloadManager 实现下载并获取下载进度实例代码
- 【Ionic】Ionic实现iOS与Android端代码『热更新』与Android升级下载功能 ( v1.3.x版本 )
- 搭建android版本更新服务器使用android系统自带的DownloadManager下载文件
- android使用OkHttp实现下载的进度监听和断点续传
- android 实现版本更新和下载安装
- Android中使用AsyncTask实现文件下载以及进度更新提示
- Android 一步一步实现版本自动更新(第二步 下载和安装apk)
- 安卓自动更新,静默更新,替换友盟更新可以在通知栏里显示更新下载进度,几行代码快速实现Android下载更新
- Android使用DownloadManager实现版本更新
- 安卓开发实战之app之版本更新(DownloadManager和http下载)完整实现
- Android通知栏实现APP下载更新(DownloadManager和自定义Notification2种方式实现)