前言

因为有涉及到静默安装,主要是针对已经root的设备,应需求,是在ARM的主板上开发的,所以对于常规手机仅能做到轮询下载,做不到静默安装。

效果图

用的鸿洋大神的百分比布局,各个分辨率都完美适配,小case

工作流程图

还是得上一下流程图,方便理解,对自己也是一种总结

Dialog内部实现代码解析

1.重写dialog的show函数,入参加一个字符串的列表,这样就可以获取到需要下载的apk的地址集合了

    /**
* 获取需要下载的文件地址,显示弹窗
*/
public void show(List<String> apkUrls) {
show();
content = "";
this.apkUrls = apkUrls;
//开始现在第一个app
downloadApp(0);
}

2.判断索引index是否大于list的size,,超出了则说明已经全部下载完成了,可以结束轮询,关闭dialog了

    if (index == apkUrls.size()) {
//index已超出范围,说明说有app已经下载完成
setContent("\n全部下载完成!" + index + "/" + apkUrls.size() + "(3秒后关闭)");
txt_dec.postDelayed(new Runnable() {
@Override
public void run() {
dismiss();
}
}, 3000);
return;
}

3.判断下载地址不为空,之后根据下载地址创建一个本地文件,并删除本地原有的同名文件(防止直接跳过了)

        String apkUrl = apkUrls.get(index);
if (TextUtils.isEmpty(apkUrl)) {
//如果apk的地址为空,则跳过,开始下载下一个
downNextApp(index);
return;
}
final String name = UrlUtils.getUrlFileName(apkUrl);
final String localPath = Environment.getExternalStoragePublicDirectory("") + "/Download/" + name + ".apk";
//如果已有同名文件将其删除
deleteFile(localPath);

4.调用HttpTools的下载函数,在下载完成回调内执行静默安装,并开始下一次轮询

        httpTools.download(apkUrl, localPath, true, new HttpCallback());

文件下载完成后回调函数内实现静默安装,并开始下一次轮询

        boolean installStatus = false;
if (DeviceUtil.install(localPath)) {
//安装成功
installStatus = true;
} else {
//安装失败
installStatus = false;
}
//完成后删除文件
deleteFile(localPath);
if (listener != null) {
//回调给使用者
listener.downloadFinish(installStatus, localPath);
}

使用Dialog

1.初始化Dialog

        DownLoadAppDialog downLoadAppDialog = new DownLoadAppDialog(mContext);

2.增加下载完成的监听回调(可省略)

        downLoadAppDialog.setOnDownLoadListener(new DownLoadAppListener() {
@Override
public void downloadFinish(boolean installStatus, String path) {
if (installStatus){
//安装成功
LogUtil.e( path + "安装成功");
}else {
//安装失败
LogUtil.e( path + "安装失败");
}
}
});

3.在需要使用的时候,调用我们自己写的show函数

downLoadAppDialog.show(apkUrls);

源码

最后再贴上源码:https://github.com/Giftedcat/DownLoadAppDialog

Android中实现轮询下载安装应用的Dialog的更多相关文章

  1. Android中实现静态的默认安装和卸载应用

    近期好长时间都没有写blog了,主要是由于近期工作上的事以及下载Android源代码的事耽误的(下载源代码这件事会在兴许的blog中写道.这个真的非常有意义呀~~),那么今天来写点什么呢?基本的灵感来 ...

  2. Android中的多线程断点下载

    首先来看一下多线程下载的原理.多线程下载就是将同一个网络上的原始文件根据线程个数分成均等份,然后每个单独的线程下载对应的一部分,然后再将下载好的文件按照原始文件的顺序"拼接"起来就 ...

  3. android中广告轮播图总结

    功能点:无限轮播.指示点跟随.点击响应.实现思路: 1.指示点跟随,指示点通过代码动态添加,数量由图片数量决定. 在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,set ...

  4. Android项目第一天,下载安装Android Studio和“我的第一个安卓项目”

    一.AS的下载我是在AS官方网站进行下载的最新版本,如图所示 二.AS的安装过程 点击你下载的安装包安装即可,傻瓜式一站到底. 到这一步时选择第二个按钮, 随后出现如下界面 这个窗口是提示我们设置代理 ...

  5. Android学习记录(6)—将java中的多线程下载移植到Android中(即多线程下载在Android中的使用)③

    在这一节中,我们就来讲多线程下载以及断点续传在android中怎么使用,前两节是为本节做准备的,没有看前两节的同学,最好看完前面的两篇文章再来看这篇.其实在android端的应用和java基本上是差不 ...

  6. Apache日志轮询Cronolog安装及简单用法

    安装日志轮询工具cronolog: [root@bqh- tools]# tar xf cronolog-.tar.gz [root@bqh- tools]# cd cronolog- [root@b ...

  7. 详细解读Android中的搜索框(二)—— Search Dialog

    Search Dialog是提供搜索的控件之一,还有一个是上次小例子给出的searchView,关于SearchView的东西后面会说到.本次先从Search Dialog说起,让大家慢慢理解andr ...

  8. Android程序版本更新--通知栏更新下载安装(转)

    Android应用检查版本更新后,在通知栏下载,更新下载进度,下载完成自动安装,效果图如下: 检查当前版本号 AndroidManifest文件中的versionCode用来标识版本,在服务器放一个新 ...

  9. android studio 3.1.4下载安装配置(附旧版本下载地址)

    windows下安装android studio.当前时间2018年9月. 最新版本的android studio3.2.0-release出来了,拥有许多新的特性 可能我是一个业余的android开 ...

随机推荐

  1. nyoj 46-最少乘法次数 (递推)

    46-最少乘法次数 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:5 submit:18 题目描述: 给你一个非零整数,让你求这个数的n次方,每次相 ...

  2. 函数的prototype

    1.函数的prototype属性 每一个函数都有一个prototype属性,默认指向object空对象(原型对象),每一个原型对象都有一个constructor属性,指向函数对象 2.给原型对象添加属 ...

  3. vue项目中安装使用vux

    vux是个vue的移动端框架. 目前移动端UI框架这么多,为啥选择vux呢?vux虽然说是个个人维护项目,但是有15000+个star,应该不比其他的团队开源框架差. 最重要的是,目前要做微信公众号和 ...

  4. 结合RBAC模型讲解权限管理系统需求及表结构创建

    在本号之前的文章中,已经为大家介绍了很多关于Spring Security的使用方法,也介绍了RBAC的基于角色权限控制模型.但是很多朋友虽然已经理解了RBAC控制模型,但是仍有很多的问题阻碍他们进一 ...

  5. Selenium+Java(二)Selenium打开IE浏览器

    前言 已在Eclipse中配置完成Selenium的相关配置,不知道如何配置的可参考我的另一篇博文:https://www.cnblogs.com/yogouo/p/11946940.html 打开I ...

  6. JS中的同步异步编程

    首先我们先看看同步与异步的定义,及浏览器的执行机制,方便我们更好地理解同步异步编程. 浏览器是多线程的,JS是单线程的(浏览器只分配一个线程来执行JS)   进程大线程小:一个进程中包含多个线程,例如 ...

  7. Linux高级命令-sort、uniq、 cut、sed、grep、find、awk

    sort(参考学习网站:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html) 功能:根据不同的数据类型进行排序 格式:s ...

  8. SpringBoot系列之集成jsp模板引擎

    目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...

  9. #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库

    在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化.但是这种序 ...

  10. 【玩转MLS系列】基础教程

    1.申请华为机器学习服务MLS标准版服务: 1.如果还未注册华为云,请先进入华为云官网https://www.huaweicloud.com/进行注册:如果已注册,请登录,转第2步. 2.在华为云官网 ...