很多客户端程序都有检测是否有更新的功能,本文大体介绍了其实现过程。此功能模块也是开源中国客户端中的源码,个人感觉用到的安卓基础知识还是比较全面的,很适合初学者学习进阶。
/**
* 检查App更新
* @param context
* @param isShowMsg 是否显示提示消息
*/
public void checkAppUpdate(Context context, final boolean isShowMsg){
this.mContext = context;
getCurrentVersion();
if(isShowMsg){
if(mProDialog == null)
mProDialog = ProgressDialog.show(mContext, null, "正在检测,请稍侯...", true, true);
else if(mProDialog.isShowing() || (latestOrFailDialog!=null && latestOrFailDialog.isShowing()))
return;
}
final Handler handler = new Handler(){
public void handleMessage(Message msg) {
//进度条对话框不显示 - 检测结果也不显示
if(mProDialog != null && !mProDialog.isShowing()){
return;
}
//关闭并释放进度条对话框
if(isShowMsg && mProDialog != null){
mProDialog.dismiss();
mProDialog = null;
}
//显示检测结果
if(msg.what == 1){
mUpdate = (Update)msg.obj;
if(mUpdate != null){
if(curVersionCode < mUpdate.getVersionCode()){
apkUrl = mUpdate.getDownloadUrl();
updateMsg = mUpdate.getUpdateLog();
showNoticeDialog();
}else if(isShowMsg){
showLatestOrFailDialog(DIALOG_TYPE_LATEST);
}
}
}else if(isShowMsg){
showLatestOrFailDialog(DIALOG_TYPE_FAIL);
}
}
};
new Thread(){
public void run() {
Message msg = new Message();
try {
Update update = ApiClient.checkVersion((AppContext)mContext.getApplicationContext());
msg.what = 1;
msg.obj = update;
} catch (AppException e) {
e.printStackTrace();
}
handler.sendMessage(msg);
}
}.start();
}
这是入口方法,布尔类型的isShowMsg 表示是否显示“正在检测”这样一个对话框,一般在程序刚进入进行初始化时不需要显示提示,在后台默认进行。在设置中进行手动更新检测时为了良好的用户体验一般设置提示对话框可见。
/**
* 获取当前客户端版本信息
*/
private void getCurrentVersion(){
try {