思想:(其实,我认为第一步就是开广告!用户看广告的过程正好检测更新)
1.在启动软件的第一刻,也就是没加载窗体之前就执行该操作。
2.检测版本要读取到应用本身的版本号
3.拿到版本号后,要对比服务器上的最新版本号
4.如果没有更新,就显示首页
5.如果出现更新,就要要询问用户是否更新
6.如果用户选择更新,就从网络中下载文件,并展示对应的UI(进度条) ,否则用户会以为程序挂掉了。
7.下载完了软件就要执行安装。
好了,过程大体就是这样,有几点可以优化,比如离线包,路径什么的,在后面实现会具体实现。
----------------------------------实现----------------------------------------
Step0:这是一步可忽略的步骤,如果先加载窗体,会在软件启动的时候先白屏再进入,可以重写Application
Step1:读取版本号
我们使用到的类PackageManager,PackageManager主要是管理应用程序包,通过它就可以获取应用程序信息。
PackageManager packageManager = this.getPackageManager();
String version = "";
try {//获得包的信息
PackageInfo packInfo = packageManager.getPackageInfo(this.getPackageName(), 0);
version = packInfo.versionName;//获取版本
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Step2:对比服务器中的版本
这里上传对比版本,是服务器端提供的端口,自己写的Servlet。
此处不再复制代码。应采用回调函数通知用户,询问用户意见,并执行相对应的函数。
Step3:处理文件存放的位置(当然,这里需要对规定路径扫描,以免出现下载未安装需要重新下载)
这里应先判断是否存在SDCard,尽量不使用内存.
这里也不再过多赘述,不会的可以点击 http://blog.youkuaiyun.com/u013519020/article/details/52233421
Step4:下载文件
服务器提供的更新接口中提供了最新版本的地址,我们只需要那最新版本的地址,使用HttpURLConnection类进行下载.
conn.getContentLength()可以获得文件的大小,再根据已下载的相除得到百分比,更新UI。
这里的已下载的是要保存文件的大小,这样可以避免存在已下载未安装的文件。
Step5:安装
//刚才下载文件的路径
File file = new File(path);
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//<span style="color: rgb(69, 69, 69); font-family: tahoma, helvetica, arial; font-size: 14px;">这个Activity会成为历史stack中一个新Task的开始</span>
intent.setAction(Intent.ACTION_VIEW);//执行动作
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");//设置执行的数据和类型
startActivity(intent);//启动