前言

因为有涉及到静默安装,主要是针对已经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. shell配置文件

    个人配置主要集中在-/.profile文件中 打开新的交互式shell时,配置文件的执行顺序是/etc/profile  /etc/bashrc  ~/.profile   最后是~/.bashrc ...

  2. 小白学习React官方文档看不懂怎么办?3.元素渲染

    直接上代码 const element = <h1>Hello, world</h1>; ReactDOM.render(     element,      document ...

  3. 操作系统——银行家算法(Banker's Algorithm)

    之前写过一篇关于死锁和银行家算法的详细描述的博客https://www.cnblogs.com/wkfvawl/p/11598647.html 写这篇博客的目的,主要是详细讲解一下银行家算法以及代码的 ...

  4. vue 中 keep-alive 缓存数据、离开时位置

    路由中: 页面中: 需要缓存的组件中: 因为是keep-alive  所以在初始化页面的时候 会走一次生命周期 当二次进入的时候就已经是缓存状态了 不会在走生命周期 于是它就有了自己的周期函数分别是 ...

  5. 一图读懂Spring Core,Spring MVC, Spring Boot,Spring Cloud 的关系与区别

    Spring框架自诞生到现在,历经多次革新,形成了多种不同的产品,分别应用于不同的项目中,为了帮助自己理解这些产品之间的关系,特此整理此图,以便自己记忆和复习.

  6. 从BWM生产学习工厂模式

    工厂模式应用非常之广,在JDK底层源码以及各大主流框架中随处可见,一般以Factory结尾命名的类,比如Mybatis中的SqlSessionFactory,Spring中的BeanFactory等, ...

  7. CSS新特性之2D转换transform

    transform是css3中具有颠覆性特征之一,可以实现元素的位移.旋转.缩放等效果 1.位移translate 1.1语法 transform: translate(x,y);//x,y分别表示x ...

  8. P1035 级数求和

    题目描述 已知:S_n= 1+1/2+1/3+…+1/nSn​=1+1/2+1/3+…+1/n.显然对于任意一个整数KK,当nn足够大的时候,S_nSn​大于KK. 现给出一个整数KK(1 \le k ...

  9. PowerMock学习(十一)之Mock private methods的使用

    Mock  private methods 就是mock私有方法啦,学到这不难发现,我们其实大部分都是通过反射去完成单元测试的,但是在实际中,某个类中的私有方法,个人不建议使用反射来测试,因为有时候会 ...

  10. linux 精确延时

    void HeartBeat_Check_TASK(void *pdata){ struct timeval tv; struct timespec ts; int err; U32 dwcount= ...