Android使用IntentService进行apk更新示例代码
作者:momentslz 发布时间:2022-01-19 12:12:07
标签:IntentService,apk,更新
通常在使用service更新应用时最常出现的问题就是Notification进度的更新问题、service在什么时间关闭以及需要我们自己在Service中创建新的线程处理耗时操作,当然这种也是可以实现的但是会显得略微繁琐
经过对比发现可以使用IntentService已经实现了对耗时操作的包装出来,我们只需要实现IntentService中的onHandleIntent方法就可以在其中进行耗时操作的处理,在处理下载问题时发现在使用intentservice时暂时没有发现可以优雅的进行进度回调的实现方法,所以我这边使用了本地广播的形式来进行进度刷新。
添加了当前状态判断,当应用处于前台状态时直接进行安装,当应用处于后台时弹出notification弹窗点击后安装,示例如下图:
先创建广播
public static class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case ACTION_TYPE_PREPARE:
if (downloadCallback != null) {
downloadCallback.onPrepare();
}
break;
case ACTION_TYPE_PROGRESS:
int progress = intent.getIntExtra("progress", 0);
// Log.d("progress", "|- " + progress + " -|");
if (downloadCallback != null) {
downloadCallback.onProgress(progress);
}
break;
case ACTION_TYPE_COMPLETE:
String file_path = intent.getStringExtra("file_path");
if (!TextUtils.isEmpty(file_path)) {
File file = new File(file_path);
if (file.exists()) {
if (downloadCallback != null) {
downloadCallback.onComplete(file);
}
}
}
break;
case ACTION_TYPE_FAIL:
String error = intent.getStringExtra("error");
if (downloadCallback != null) {
downloadCallback.onFail(error + "");
}
break;
}
}
然后在IntentService中初始化本地广播并发送信息
@Override
public void onCreate() {
super.onCreate();
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
}
// 在下载进度刷新的地方进行回调
private void progress(int progress) {
Intent intent = new Intent(FileDownloaderManager.ACTION_TYPE_PROGRESS);
intent.putExtra("progress", progress);
mLocalBroadcastManager.sendBroadcast(intent);
}
private void downApk(String url) {
.....
.....
progress(progress);
.....
.....
}
在activity中使用
mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
mBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_TYPE_PREPARE);
intentFilter.addAction(ACTION_TYPE_PROGRESS);
intentFilter.addAction(ACTION_TYPE_COMPLETE);
intentFilter.addAction(ACTION_TYPE_FAIL);
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);
// ondestory时调用
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
以上源码已进行封装,方便使用具体操作步骤如下:
|- 初始化及注册回调
//初始化文件下载管理类
FileDownloaderManager.init(context)
// 注册下载进度监听,并开启广播接收
FileDownloaderManager.registerDownload(object : FileDownloaderManager.DownloadCallback {
override fun onComplete(file: File) = mainView.downloadSucc(file)
override fun onFail(msg: String?) = Unit
override fun onProgress(progress: Int) = mainView.onProgress(progress)
override fun onPrepare() = Unit
})
//开始下载
FileDownloaderManager.download(url)
|- 在下载完成后进行资源重置
FileDownloaderManager.unbinder()
源码地址:源码地址
文档地址:文档地址
来源:https://www.jianshu.com/p/833abc5ee9d0
0
投稿
猜你喜欢
- InterProcessMutex内部实现了zookeeper分布式锁的机制,所以接下来我们尝试使用这个工具来为我们的业务加上分布式锁处理的
- 一、async和await特性的结构1. 异步和同步同步方法:如果一个方法被调用了,等待其执行所有处理后调用方法才继续执行的方法。异步方法:
- 1.定义多态是同一个行为具有多个不同表现形式或形态的能力。多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口
- 引言在Android应用中,列表有着举足轻重的地位,几乎所有的应用都有列表的身影,但是对于列表的交互体验一直是一个大问题。在性能比较好的设备
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对
- java.lang.ArrayStoreException 分析这个demo来说明怎样排查一个spring boot 1应用升级到sprin
- 这里的问题:当我点击确定按钮,也就是 AlertDialog 里的 PositiveButton 的时候,我们需要判断用户是输入是否符合我们
- 网上的操作方式是我没有进行尝试,感兴趣的可以试试nohup java -Dserver.port=8848 -Dlogging.level.
- 直接上代码吧。昨晚腾讯在线测试遇到的题。螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如
- 在Thread中注入Bean无效在Spring项目中,有时需要新开线程完成一些复杂任务,而线程中可能需要注入一些服务。而通过Spring注入
- import java.io.*;import java.text.SimpleDateFormat;import java.util.*;
- 绪论转眼间,2016伴随着互联网寒冬和帝都的雾霾马上就过去了,不知道大家今年一整年过得怎么样?最近票圈被各个城市的雾霾刷屏,内心难免会动荡,
- 一、前提准备安装R软件,需要安装32位的R软件,64位的调用会报错。另外就是讲R添加到电脑环境变量中。打开R软件,安装包 scatterpl
- 新公司工程是用Maven管理的,技术上使用了JPA,但是我导入工程到MyEclipse时,applicationContext.xml中提示
- Java 中的内部类这是一个 Java 内部类的简单实现:public class OutterJava { pr
- 责任链模式责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递
- Android 4.0 系统定义了一系列的高效导航方式 (Effective Navigation), 主要包括标签、下拉列表、以及向上和返
- (1)编写接口Animal (Animal.java)public interface Animal{ public abstr
- 下面介绍的这个版本搭配是我研究好久好久才跑通的,这在我的电脑上是一组可行的配置,如果你使用了同样的配置跑不通,那可能是环境中某一部分还是有不
- 如下所示:import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.