Android中实现轮询下载安装应用的Dialog
前言
因为有涉及到静默安装,主要是针对已经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的更多相关文章
- Android中实现静态的默认安装和卸载应用
		近期好长时间都没有写blog了,主要是由于近期工作上的事以及下载Android源代码的事耽误的(下载源代码这件事会在兴许的blog中写道.这个真的非常有意义呀~~),那么今天来写点什么呢?基本的灵感来 ... 
- Android中的多线程断点下载
		首先来看一下多线程下载的原理.多线程下载就是将同一个网络上的原始文件根据线程个数分成均等份,然后每个单独的线程下载对应的一部分,然后再将下载好的文件按照原始文件的顺序"拼接"起来就 ... 
- android中广告轮播图总结
		功能点:无限轮播.指示点跟随.点击响应.实现思路: 1.指示点跟随,指示点通过代码动态添加,数量由图片数量决定. 在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,set ... 
- Android项目第一天,下载安装Android Studio和“我的第一个安卓项目”
		一.AS的下载我是在AS官方网站进行下载的最新版本,如图所示 二.AS的安装过程 点击你下载的安装包安装即可,傻瓜式一站到底. 到这一步时选择第二个按钮, 随后出现如下界面 这个窗口是提示我们设置代理 ... 
- Android学习记录(6)—将java中的多线程下载移植到Android中(即多线程下载在Android中的使用)③
		在这一节中,我们就来讲多线程下载以及断点续传在android中怎么使用,前两节是为本节做准备的,没有看前两节的同学,最好看完前面的两篇文章再来看这篇.其实在android端的应用和java基本上是差不 ... 
- Apache日志轮询Cronolog安装及简单用法
		安装日志轮询工具cronolog: [root@bqh- tools]# tar xf cronolog-.tar.gz [root@bqh- tools]# cd cronolog- [root@b ... 
- 详细解读Android中的搜索框(二)—— Search Dialog
		Search Dialog是提供搜索的控件之一,还有一个是上次小例子给出的searchView,关于SearchView的东西后面会说到.本次先从Search Dialog说起,让大家慢慢理解andr ... 
- Android程序版本更新--通知栏更新下载安装(转)
		Android应用检查版本更新后,在通知栏下载,更新下载进度,下载完成自动安装,效果图如下: 检查当前版本号 AndroidManifest文件中的versionCode用来标识版本,在服务器放一个新 ... 
- android studio 3.1.4下载安装配置(附旧版本下载地址)
		windows下安装android studio.当前时间2018年9月. 最新版本的android studio3.2.0-release出来了,拥有许多新的特性 可能我是一个业余的android开 ... 
随机推荐
- FB力挺的Pytorch深度学习 书本来了
			获得 fb首席科学家力挺的 pytorch教程 发布啦, 看截图 
			题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%10000 ... 
- 【Android - 组件】之IntentFilter的匹配规则
			我们知道,Activity的启动模式分为两种,分别是显式启动和隐式启动.显式启动需要明确的指定被启动的对象的组件信息,包括包名和类名:而隐式启动需要 Intent 能够匹配目标组件的 IntentFi ... 
