在上一篇文章中我们从服务器读取配置并解析成了UpdateInfo对象。这一篇文章将介绍如何将信息比对,并显示更新对话框,具体流程如下:
//判读服务器的版本号和客户端的版本号是否相同
if(isNeedUpdate(versiontext)){
Log.i(TAG, "弹出升级对话框");
showUpdateDialog();
}
在SplashActivity的onCreate方法中判读服务器版本号和客户端版本号是否相同
获取客户端当前版本号的方法
/**
* 获取当前应用程序的版本号
*
* @return
*/
private String getVersion() {
try {
//包管理服务
PackageManager manager = getPackageManager();
//第一个参数为包名
PackageInfo info = manager.getPackageInfo(getPackageName(), 0);
return info.versionName;
} catch (Exception e) {
e.printStackTrace();
return "版本号未知";
}
}
获取服务器版本号并判断是否需要升级
/**
*
* @param version 当前客户端的版本信息
* @return 是否需要更新
*/
public boolean isNeedUpdate(String versiontext){
Log.i(TAG, "进来判断是否需要更新");
try {
UpdateInfoService service = new UpdateInfoService(this);
System.out.println(service);
info = service.getUpdateInfo(R.string.updateurl);
System.out.println(info.getVersion());
String version = info.getVersion();
Log.i(TAG, "服务器版本是"+version);
if(versiontext.equals(version)){
Log.i(TAG, "版本号相同无需升级,进入主界面");
return false;
}else{
Log.i(TAG, "版本号不同,需要升级");
return true;
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this , "获取更新信息异常,进入主界面", Toast.LENGTH_SHORT);
return false;
}
}
如果版本号不同则显示升级对话框
/**
* 升级对话框
*/
public void showUpdateDialog(){
AlertDialog.Builder builder = new Builder(this);
builder.setIcon(R.drawable.icon5);
builder.setTitle("升级提醒");
builder.setMessage(info.getDescription());
//让用户不能取消对话框
builder.setCancelable(false);
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "下载Apk文件" + info.getApkurl());
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "用户取消,进入程序主界面");
}
});
builder.create().show();
}
源代码下载:http://download.youkuaiyun.com/detail/lxq_xsyu/5947441