Android在线更新安装包,Android在线更新下载方案

目的

App的在线更新是每一个项目必有的功能,但在过程当中会遇到一些问题,在此记录下心得。

步骤

1、将最新版本号和本地版本号进行对比;

2、如需更新,则弹出更新提示对话框;

3、下载更新APK文件,并显示进度条和通知栏;

4、安装APK

具体流程

一、通过网络接口获取到线上最新版本号,将最新版本号和本地版本号进行对比

首先从网络回调接口中获取最新版本号,再将本地版本号与最新版本号进行对比,如果需要更新则弹出对话框

/**

* 更新提示对话框

*/

public void appUpdateDialog(final Context context, final UpdateCheckRetBean bean) {

new MaterialDialog.Builder(context)

.title("金米米") //标题内容

.titleColor(Color.parseColor("#FFC736")) //标题颜色

.iconRes(R.drawable.ic_logo_share) //图标

.content(bean.getDetail()) //内容

.positiveText("立即更新") //选择更新

.canceledOnTouchOutside(false) //触摸窗口边界以外是否关闭窗口,设置 false

.onPositive(new MaterialDialog.SingleButtonCallback() {

@Override

public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

dialog.dismiss();

downloadDialog(context, bean.getUrl()); //应用下载

setNotification(context, bean.getDetail()); //显示通知栏

}

})

.negativeText("取消") //选择取消

.onNegative(new MaterialDialog.SingleButtonCallback() {

@Override

public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

dialog.dismiss();

}

})

.show();

}

三、下载更新APK文件,并显示进度条和通知栏

这部分是重点,分三部分解决:

1、显示进度条:

/**

* 应用下载对话框

*

* @param downloadUrl APK下载链接

*/

private void downloadDialog(final Context mContext, String downloadUrl) {

downLoadDialog = new MaterialDialog.Builder(mContext)

.customView(R.layout.layout_app_update, false) //自定义View

.title("更新中...")

.iconRes(R.drawable.ic_logo_share)

.titleColor(Color.parseColor("#FFC736"))

.negativeText("取消下载") //选择取消

.canceledOnTouchOutside(false) // 触摸窗口边界以外是否关闭窗口,设置 false

.onNegative(new MaterialDialog.SingleButtonCallback() {

@Override

public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

ToastUtils.showShortToast(mContext, "取消更新");

dialog.dismiss();

notificationManager.cancel(NOTIFICATION_ID); //取消通知栏

OkHttpClientUtil.getInstance().cancelOkHttp("download"); //取消下载更新

}

})

.build();

//拦截手机返回键

downLoadDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {

@Override

public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {

ToastUtils.showShortToast(mContext, "进入后台下载模式");

return keyCode != KeyEvent.KEYCODE_BACK &&

downLoadDialog != null && downLoadDialog.isShowing();

}

});

npbDownload = downLoadDialog.getCustomView().findViewById(R.id.npb_download); //设置进度条

npbDownload.setProgressTextSize(45); //设置进度条字体大小

downLoadDialog.show();

downloadApk(mContext, downloadUrl); //下载更新APK

}

3、通知栏展示进度:

/**

* 创建通知栏

*/

private void setNotification(Context context, String detail) {

notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

notification = new Notification.Builder(context);

notification.setSmallIcon(R.drawable.ic_16) //设置通知的图标

.setTicker("正在加载更新包") //设置状态栏的标题

.setContentTitle("正在加载更新包") //设置标题

.setContentText(detail) //设置内容

.setDefaults(Notification.FLAG_NO_CLEAR) //设置默认的提示音

.setPriority(Notification.PRIORITY_DEFAULT) //设置该通知的优先级

.setOngoing(true) //让通知左右滑的时候不能取消通知

.setWhen(System.currentTimeMillis()) //设置通知时间,默认为系统发出通知的时间,通常不用设置

.setAutoCancel(true); //打开程序后图标消失

//解决5.0系统通知栏白色Icon的问题

Drawable appIcon = getAppIcon(context);

Bitmap drawableToBitmap = null;

if (appIcon != null) {

drawableToBitmap = drawableToBitmap(appIcon);

}

if (drawableToBitmap != null) {

notification.setSmallIcon(R.drawable.ic_16);

notification.setLargeIcon(drawableToBitmap);

} else {

notification.setSmallIcon(context.getApplicationInfo().icon);

}

Notification notify = notification.build();

notify.flags |= FLAG_ONLY_ALERT_ONCE;

notificationManager.notify(NOTIFICATION_ID, notify);

}

/**

* 合成更新的Icon

*

* @param drawable

* @return

*/

public Bitmap drawableToBitmap(Drawable drawable) {

Bitmap bitmap = Bitmap.createBitmap(

drawable.getIntrinsicWidth(),

drawable.getIntrinsicHeight(),

drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);

Canvas canvas = new Canvas(bitmap);

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

drawable.draw(canvas);

return bitmap;

}

/**

* 获取App的Icon

*

* @param context

* @return

*/

public Drawable getAppIcon(Context context) {

try {

return context.getPackageManager().getApplicationIcon(context.getPackageName());

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

return null;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c汇编语言例题,汇编语言例题分析.doc

汇编语言例题分析汇编语言例题分析《汇编语言程序设计》练习题作者名:不详 来源:网友提供 06年6月8日一、基本概念1、8088/8086CPU内部寄存器有______个 ,其中的______是通用寄存器,______是基址和变址寄存器,______是段寄存器&a…

api网关 android,如何通过Android上的retrofit2使用Cognito Credentials调用API网关?

我在我的Android应用程序中使用retrofit2进行任何http / rest调用.现在我需要调用Amazon AWS API Gateway生成的api.AWS文档say我应该生成客户端代码抛出API网关控制台并使用类ApiClientFactory来构建请求:ApiClientFactory factory new ApiClientFactory();// Use…

android测光代码,常用测光表软件:Android篇

《常用测光表软件:Android篇》由会员分享,可在线阅读,更多相关《常用测光表软件:Android篇(5页珍藏版)》请在人人文库网上搜索。1、常用测光表软件:Android篇 在Android系统中也有经典的测光表软件。Light Meter测光表…

android怎么换小米系统更新,miui8怎么更新 miui8更新升级方法汇总

小米miui8系统已经开始测试,相信你的小米手机已准备好迎接新系统的到来,下文介绍小米miui8更新方法大全,一起小编一起了解下吧!小米miui8刷机方法大全:一、系统推送OTA升级OTA推送升级MIUI8(需连接Wifi进行)根据微博上…

signature=800c2934bb72de8d2912c36e4444ceb9,Detection and Quantification of Stiction

摘要:An effective non-intrusive data-based monitoring method may reduce the cost of control loop performance maintenance by screening and short-listing those control loops or valves that need maintenance. The invention comprises a data-based, mo…

Android入门简书,android ndk开发入门随笔(一)

ndk,jni入门随笔因为工作缘故最近在研究jni,ndk方面知识,在此总结入坑以来的一些问题.配置环境可以在下面geogle官方看。下面是链接我一说ndk,jni可能小伙伴要问了这是什么,在此我来总结我个人的看法jni就是一个接口&a…

HTML计算机英文字母,计算机入门知识 英文字母缩写翻译 -电脑资料

PC:个人计算机Personal ComputerCPU:中央处理器Central Processing UnitCPU Fan:中央处理器的“散热器”(Fan)MB:主机板MotherBoardRAM:内存Random Access Memory,以PC-代号划分规格,如PC-133&a…

html语言基础tr,HTML tr 标签

HTML 标签定义和用法 标签定义 HTML 表格中的行。tr 元素包含一个或多个 th 或 td 元素。实例一个简单的 HTML 表格,包含两行两列:MonthSavingsJanuary$100TIYHTML 与 XHTML 之间的差异在 HTML 4.01 中,tr 元素的 "bgcolor" 是不被…

html++标签页+界面,CSS+DIV实现多标签页面。

学习时自娱自乐。index.html-----------------------无标题文档页面1页面2页面3页面4页面51111tab.css---------------------------body{margin:10px;}.selbar{width:364px;}.content{border-bottom:1px solid #0033FF;border-left:1px solid #0033FF;border-right:1px solid #…

2021谷饶中学高考成绩查询,高考成绩

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼汕头市澄海中学202人   汕头市下蓬中学7人   潮阳金堡中学2人汕头市聿怀中学121人   潮阳一中明光学校7人  潮南峡晖中学2人汕头市六都中学99人    澄海华侨中学7人    潮南两英中学2人潮阳黄图盛中学67人    澄海…

计算机应用基础自考,自考计算机应用基础

真正成为了一个在职人员之后就应该随时做好准备在企业中升职加薪了。在努力的阶段我们会遇到不一样的优秀人员,我们也是不可以放弃自己的,必须要在努力的阶段给与自己更多的希望。自学考试的方式一直都是受到了在职人员的关注,在选择专业的时…

计算机多重网络intnet,南昌大学计算机网络实验(全).doc

南昌大学计算机网络实验(全)南昌大学计算机网络实验(全)实 验 报 告实验课程:学生姓名:学 号:专业班级:2013年 06月 08日目录实验1 网线制作及对等网配置2实验2 安装与管理Windows 2000 Server11实验3:虚拟局域网(VLAN…

台式计算机驱动程序未被安装,电脑未能成功安装设备驱动程序怎么办

电脑的设备驱动程序:驱动程序一般指的是设备驱动程序(DeviceDriver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,如某设备的驱动程序未能正确安装&a…

计算机科学导论课后感悟,计算机科学导论课后总结_2

计算机科学导论课后总结_2一、图灵机1、图灵机的等价机器:继续上节课没讲完的内容,我知道了,除了图灵机以外,人们还发明了很多其它的计算模型。包括:寄存器机、递归函数、λ演算、生命游戏、马尔可夫算法。感悟&#x…

在微型计算机系统中,打印机一般是通过( ,2013湖南省计算机等级考试试题 二级C试题最新考试试题库...

1、对待计算机软件正确的态度是( C )A、计算机软件不需要维护B、计算机软件只要能复制得到就不必购买C、受法律保护的计算机软件不能随便复制D、计算机软件不必有备份2、断电会使原来存储的信息丢失的存储器是( A )A、半导体RAM B、硬盘 C、ROM D、软盘3、下列字符中&#xff0…

今日头条的排名算法_今日头条的推荐机制是怎么算法的?

机器通过计算得出的用户阅读兴趣用户阅读过的文章分类和关键词;用户聚类:相似类型用户还喜欢阅读的其他文章类型;用户在今日头条客户端主动标记「不感兴趣」的实体词或文章类型。根据以上数据,系统对用户的阅读兴趣就能有个基本的…

android摄像头矩形框提取_视频图像摄像头跟踪的上位机系统设计

​背景介绍视频序列中的目标进行跟踪是计算机视觉的热门研究领域之一,其主要过程是首先在视频序列的第一帧图像中选定跟踪目标,之后运行跟踪算法,实现在后续帧中预测跟踪目标的位置。本系统设计了一个集成视觉目标跟踪算法的上位机&#xff0…

html4符合web的标准吗,在生成HTML,表格等时,CakePhp是否“符合标准”?

因此,我阅读了很多“使用Web标准进行设计”,并且非常喜欢它。 我是CakePhp的大用户,当我查看Cake用其FormHelper创建的各种表单元素的来源时,我看到了各种无关紧要的内容在书中,他提倡语义HTML,并尽可能简单…

c++清空一个txt文本_Linux下常用文本处理命令大全

Linux中很多文本工具都使用到了正则表达式,正则表达式可以极大的简化linux系统管理工作,因为网上有很多正则相关的教程,所以这里不再讲述,我当时看的是菜鸟的正则表达式,看个一下午在实验几遍基本就会了,除…

labuladong 的算法小抄_来自GitHub 68.8k star的硬核算法教程

很多朋友害怕算法,其实大可不必,算法题无非就那几个套路,一旦掌握,就会觉得算法实在是太朴实无华且枯燥了!本文选自硬核算法教程《labuladong的算法小抄》,带你学习套路,把握各类算法问题的共性…