Android(2)—Mono For Android App版本自动更新
0.前言
公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题;本人经过近一周的学习整理,
终于有了个Demo,开发环境:VS2012+Mono4.8.00013破解版 测试手机:三星I9220 Note1
1.已实现的功能和逻辑
1)采用后台服务的方式进行下载
2)下载过程中通知栏显示,并显示下载进度
3)下载界面采用异步方式更新进度条
4)下载完成后点击进行安装-启动新版本
2.已知BUG和待完善的地方
1)BUG-从通知栏进入更新界面后,然后按返回键-接着再从通知栏进入更新界面,更新界面的数据就完全被初始化了
2)待完善-更新过程中切换通知栏和界面间有点卡
3)待完善-下载完成后点击通知栏,通知栏的信息未消失
4)待完善-安装完成后未删除下载的程序
5)待完善-下载过程中需要在通知栏一直显示,类似于微信未读信息的显示
6)待完善-未添加下载过程中暂停的操作
7)待完善-网络异常及超时未处理
3.程序实现(1)- 更新逻辑
谷歌建议我们使用VersionCode自增来表明版本升级,无论是大的改动还是小的改动,而VersionName是显示给用户的软件版本。所以我们选择VersionCode作为我们定义版本升级的参数。
而定义VersionCode是在AndroidManifest.xml文件中manifest节点中增加android:versionCode="1" android:versionName="1.0",然后与服务器端版本进行比较,实现如下:

4.程序实现(2)- 创建服务
为了在更新的过程中用户能够同时操作App,我们需要将下载的过程用服务来实现,服务中需要做的就是通知栏显示、下载更新和刷新下载进度全局变量,以便下载界面获取;

5.程序实现(3)- 异步刷新进度条
为了友好地用户操作,下载过程中需要刷新界面中的进度条和文本信息,以告诉用户下载未停止,这里采用的是异步的方式,异步DoInBackground方法中需要执行PublishProgress函数
OnProgressUpdate方法才会起作用,可以理解为后台推送进度的更改,这样才会触发OnProgressUpdate事件;

6.程序实现(4)- 下载完成后进行安装
下载完成后需要让用户安装程序,安装的代码如下,我之所以单独帖出来,是因为这个地方卡了很久,之前就少了一句,希望对大家有所帮助:
public static void InstallNewApk(Context m_Context)
{
Intent ite = new Intent(Intent.ActionView);
string filePath = m_Context.Resources.GetString(Resource.String.FilePath);
var uriPath = Android.Net.Uri.Parse(@"file://" + filePath);
ite.SetDataAndType(uriPath, @"application/vnd.android.package-archive");
ite.SetFlags(ActivityFlags.NewTask);//这句很关键,没有这句安装完成后不会弹出“完成”和“打开”的对话框;
m_Context.StartActivity(ite);
}
7.测试方法
本地安装1.0版本,然后将2.0的版本放到服务端,配置String.xml里的DownLoadUrl参数,这样就可以进行测试了,该程序只在内网WLAN下测试完成,其他测试需要继续进行;
8.共同进步
源码的下载地址为:http://pan.baidu.com/s/1tfHpW 我希望有需要的同学可以下载并完善这个Demo,我之后会把更新的这些信息放在本博文的后面,希望各位大牛不吝惜自己的知识,共同学习;
代码中有不恰当地方希望各位同学热情指出;
9.小结&致谢
在研究该功能时,参考的资料大多是Java的,转换过程有点累人,个别资料都还是比较有参考价值的,感谢这些作者,特别感谢网友【绿豆荚】、【/aiq十三楼丶楼主】的不吝指教。
10.BUG修改&细节完善 (期待各位同学的解答)
Android(2)—Mono For Android App版本自动更新的更多相关文章
- Android App版本自动更新
App在开发过程中,随着业务场景的不断增多,功能的不断完善,早期下载App的用户便无法体验最新的功能,为了能让用户更及时的体验App最新版本,在App开发过程加入App自动更新功能便显得尤为重要.更新 ...
- Android实现App版本自动更新
现在很多的App中都会有一个检查版本的功能.例如斗鱼TV App的设置界面下: 当我们点击检查更新的时候,就会向服务器发起版本检测的请求.一般的处理方式是:服务器返回的App版本与当前手机安装的版本号 ...
- Android(3)—Mono For Android App版本自动更新(2)
0.前言 这篇博文是上一篇的延续,主要是修改上一个版中的BUG和优化一些待完善的项,也算是结贴,当然还有需要完善的,等日后项目中用到的时候再单独写出来吧,本篇主要写升级改进的部分: 改进1.修复[BU ...
- 如何实现已发布app的自动更新
要实现app的自动更新,做两件事情就可以搞定 1.获取当前手机中的app版本号 我们可以通过查询mainbundle中的获取CFBundleVersion NSDictionary *infoDict ...
- C#.Net版本自动更新程序及3种策略实现
C#.Net版本自动更新程序及3种策略实现 C/S程序是基于客户端和服务器的,在客户机编译新版本后将文件发布在更新服务器上,然后建立一个XML文件,该文件列举最新程序文件的版本号及最后修改日期.如程序 ...
- Android 版本自动更新
截图如下: 代码实现如下: package com.update.apk; import java.io.BufferedReader; import java.io.File; import jav ...
- app的自动更新(调用DownloadManager)
具体思路为:调用接口与服务器版本对比,当服务器版本号大于本地的,调用DownloadManager进行下载,之前也试过很多方法,但是兼容性都不是很好,还有一点要注意的是,在这里我并没有设置固定的下载路 ...
- iOS中如何知道app版本已更新
主要用于程序升级,开启程序后是否显示新特性两个方面. 1.苹果app版本 苹果规定,程序的版本只能升不能降.例如1.0->1.1可以,1.1->1.0就不可以,不允许上架. 2.app版本 ...
- H5+app,自动更新后自动删除安装包
H5+app 自动删除安装包 一.前言 之前做好的app自动更新,遗留下了一个问题,就是自动更新后安装包没有自行删除掉. 好像现在的手机的系统是有安装完自动清理安装包的.想我这个H5+的app安装完后 ...
随机推荐
- 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信
接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...
- ABP文档 - Mvc 控制器
文档目录 本节内容: 简介 AbpController基类 本地化 其它 过滤 异常处理和结果包装 审计日志 验证 授权 工作单元 反伪造 模型绑定器 简介 ABP通过nuget包Abp.Web.Mv ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- JavaScript function函数种类
本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通函数:介绍普通函数的特性:同名覆盖.arguments对象.默认返回值等. 2. 匿名函数:介绍匿名函数的特性:变量匿名函数.无名称匿名函数. ...
- Twproject Gantt开源甘特图功能扩展
1.Twproject Gantt甘特图介绍 Twproject Gantt 是一款基于 jQuery 开发的甘特图组件,也可以创建其它图表,例如任务树(Task Trees).内置编辑.缩放和 CS ...
- Collection集合
一些关于集合内部算法可以查阅这篇文章<容器类总结>. (Abstract+) Collection 子类:List,Queue,Set 增: add(E):boolean addAll(C ...
- [转载]敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- Spring5:@Autowired注解、@Resource注解和@Service注解
什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...
- Java下好用的开源库推荐
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ...