前言

因为有涉及到静默安装,主要是针对已经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 524-A-B Problem (java stripTrailingZeros, toPlainString)

    524-A-B Problem 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:4 难度:3 题目描述: A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下 ...

  2. 力扣(LeetCode)验证回文字符串II 个人题解

    给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: ...

  3. linux文件时间

    Linux 查看文件修改时间(精确到秒)(简单) ls --full-time 查看文件时间戳命令:stat test.txt linux 下查看文件修改时间 等(详细) 查看文件时间戳命令:stat ...

  4. 函数指针和成员函数指针有什么不同,反汇编带看清成员函数指针的本尊(gcc@x64平台)

    函数指针是什么,可能会答指向函数的指针. 成员函数指针是什么,答指向成员函数的指针. 成员函数指针和函数指针有什么不同? 虚函数指针和非虚成员函数指针有什么不同? 你真正了解成员函数指针了吗? 本篇带 ...

  5. Tarjan-割点

    割点——tarjan #include <bits/stdc++.h> using namespace std; ; ; int n, m; int ans;//个数 * MAXM], n ...

  6. 面试官:你连RESTful都不知道我怎么敢要你?

    目录 01 前言 02 RESTful的来源 03 RESTful6大原则 1. C-S架构 2. 无状态 3.统一的接口 4.一致的数据格式 4.系统分层 5.可缓存 6.按需编码.可定制代码(可选 ...

  7. scikit-learn文本特征提取之TF-IDF

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术. TF-IDF是一种统计方法,用以评估一字词对于一个文件集 ...

  8. Wordpress未授权查看私密内容漏洞 分析(CVE-2019-17671)

    目录 0x00 前言 0x01 分析 0x02 思考 0x03 总结 0x04 参考 0x00 前言 没有 0x01 分析 这个漏洞被描述为"匿名用户可访问私密page",由此推断 ...

  9. Python下定义输出日志

    # 话不多说,直接看代码,,, # -*- coding:UTF-8 -*- # python version: 2.7.15 #脚本名, 日志名,日志路径 import os import sys ...

  10. CSS3选择器归类整理

    CSS3选择器归类整理(附CSS优先级要点) CSS是用于网页设计可用的最强大的工具之一.使用它我们可以在几分钟内改变一个网站的界面,而不用改变页面的标签.在深入研究CSS选择器之前,我们应该先搞懂C ...