android 检查软件是否有更新版本
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import com.yuxin.mhealth.R;
import com.yuxin.mhealth.http.action.BaseAction;
import com.yuxin.mhealth.ui.BaseActivity;
import com.yuxin.mhealth.utils.DialogUtil;
import com.yuxin.mhealth.utils.SysConstact;
import com.yuxin.mhealth.utils.SysDownloadUtils;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Handler;
import android.os.Message;
/**
* @description 软件更新
*/
public class UpdateManagerActivity extends BaseActivity {
/* 保存解析的XML信息 */
HashMap<String, String> mHashMap;
private Context mContext;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x003:
closeProgressDialog();
// 显示新版本更新对话框
showNoticeDialog();
break;
case 0x004:
doProgressDialog("当前已经是最新版本!");
closeProgressDialog();
break;
case 0x005:
doProgressDialog("检查更新失败!");
closeProgressDialog();
break;
default:
break;
}
};
};
protected void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
};
/**
* 检测软件更新
*/
public void checkUpdate() {
switch (isUpdate()) {
case 0:
mHandler.sendEmptyMessage(0x005);
break;
case 1:
// 显示提示对话框
mHandler.sendEmptyMessage(0x003);
break;
case 2:
mHandler.sendEmptyMessage(0x004);
break;
default:
break;
}
}
/**
* 检查软件是否有更新版本
*
* @return
* @throws Exception
*/
private int isUpdate() {
// 获取当前软件版本
int versionCode = getVersionCode(mContext);
URL url;
// 获取,解析XML文件。 由于XML文件比较小,因此使用DOM方式进行解析
ParseXmlService service = new ParseXmlService();
try {
url = new URL(BaseAction.getUploadUrl(this));
HttpURLConnection con = (HttpURLConnection) url.openConnection();
mHashMap = service.parseXml(con.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
if (null != mHashMap) {
SysConstact.Log("版本" + mHashMap.get("version"));
int serviceCode = Integer.valueOf(mHashMap.get("version").trim());
// 版本判断
if (serviceCode > versionCode) {
return 1;
} else {
return 2;
}
}
return 0;
}
/**
* 获取软件版本号
*
* @param context
* context
* @return
*/
private int getVersionCode(Context context) {
int versionCode = 0;
try {
String packageName = context.getPackageName();
// 获取软件版本号,对应AndroidManifest.xml下android:versionCode
versionCode = context.getPackageManager().getPackageInfo(
packageName, 0).versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return versionCode;
}
/**
* 显示软件更新对话框
*/
private void showNoticeDialog() {
// 构造对话框
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle(R.string.soft_update_title);
builder.setMessage(R.string.soft_update_info);
// 更新
builder.setPositiveButton(R.string.soft_update_updatebtn,
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 显示下载对话框
DialogUtil.toast(getApplicationContext(), "下载已经开始,可以在通知栏查看进度!");
SysDownloadUtils.start(getApplicationContext(), mHashMap.get("url").trim(),mHashMap.get("name").trim());
dialog.dismiss();
}
});
// 稍后更新
builder.setNegativeButton(R.string.soft_update_later,
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
Dialog noticeDialog = builder.create();
noticeDialog.show();
}
}
android 检查软件是否有更新版本的更多相关文章
- [转] Android SDK manager 无法获取更新版本列表
打开这个网址(LINK)就可以看到adt的详细信息. 或者直接在你的eclipse的Help > Install New Software里面add,地址直接输入 https://dl-ss ...
- android SDK manager 无法获取更新版本列表【转载】
http://mirrors.neusoft.edu.cn/eclipse/releases/luna/打开这个网址就可以看到adt的详细信息: http://developer.android.c ...
- android SDK manager 无法获取更新版本的解决办法
http://mirrors.neusoft.edu.cn/eclipse/releases/luna/打开这个网址就可以看到adt的详细信息: http://developer.android.c ...
- android SDK manager 无法获取更新版本列表
打开SDK Manager---Tools---Options,填入如下代理和端口,勾选选项也如下. 网址:mirrors.neusoft.edu.cn 端口:80 99%是成功的 参考:http:/ ...
- Android Studio实现APK的更新、下载、安装
先不讲那么多看效果图: 下面来讲解一些更新CODE,原理大家都知道,不废话,直接上代码.里面有一些是我自己做的测试例子,所以大家可以直接删掉就好了 第一个:activity_main.xml < ...
- android 更新版本
1.UpdateManager package com.rfid.util; import java.io.File; import java.io.FileOutputStream; import ...
- Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新
登陆时splash初始页调用接口检查app版本.如有更新,使用okGo的文件下载,保存到指定位置,调用Android安装apk. <!-- Android 8.0 (Android O)为了针对 ...
- 近期会放出tlplayer for android的更新版本
tlplayer for android的一次重大更新在近期将会放出,自从去年初的时候放出tlplayer android版本后,一直都没有更新tlplayer,而tlplayer for windo ...
- PDF 补丁丁 0.6.0.3413 版发布(修复提取图片问题,增加自动检查软件更新功能)
新的测试版修复了提取图片旋转方向错误.遇到格式错误的图片后无法继续提取的问题. 另外增加了自动检查软件版本更新的功能(该功能不上传关于用户的任何个人信息,仅向本博客请求静态的版本信息文件,可在“帮助- ...
随机推荐
- 简要分析javascript的选项卡和轮播图
选项卡 思路 1.按钮和展示的页面要对应:分别遍历,记住当前按钮的索引,让其成为展示页面的索引 2.只出现所对应的页面:所有的页面隐藏,只展示想要的页面 只展示js代码 for(var i=0;i&l ...
- 【BZOJ4816】数字表格(莫比乌斯反演)
[BZOJ4816]数字表格(莫比乌斯反演) 题面 BZOJ 求 \[\prod_{i=1}^n\prod_{j=1}^mf[gcd(i,j)]\] 题解 忽然不知道这个要怎么表示... 就写成这样吧 ...
- 【LightOJ1282】Leading and Trailing(数论)
[LightOJ1282]Leading and Trailing(数论) 题面 Vjudge 给定两个数n,k 求n^k的前三位和最后三位 题解 这题..真的就是搞笑的 第二问,直接输出快速幂\(m ...
- lftp 卡在 Making data connection 解决方法
用lftp连接到一个ftp服务器,执行ls命令结果一直Making data connection. google一下都说执行set ftp:ssl-allow no,但是实测无效. 上lftp官网看 ...
- Delphi的RzDbgrid改变某行的背景色
本想改变符合条件的行的背景色,试了DbgridEh和原生的Dbgrid直接在DrawColumnCell事件中写重绘代码就好了,But在RzDbgrid就不起效果,查了好一会,百度了一大堆,都是千篇一 ...
- PHP 获取访问来源
原文:http://www.upwqy.com/details/16.html $_SERVER['HTTP_REFERER'] 通过这个全局变量可以获取访问的链接是来源于哪里 比如说从博客园 htt ...
- c++标准头文件
C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能. <cname>形式的标准头文件[ <complex>例外]其 ...
- SublimeText3插件安装及使用
之前写过一篇文章讲了安装PackageControl,这里就不做赘述了,需要的朋友移步到这篇文章:Sublime Text安装package control 安装插件方法:通过preferencs-- ...
- 关于js高度和宽度的获取 ----2017-03-29
来源:百度 对错有待实践检验 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: docu ...
- JavaIO
1.字节流和字符流 在IO有两种数据传输格式一个是字符流还一个是字节流,但是字符流就会涉及到编码的问题. 一开始美国使用的自己的编码表就是ASCII表 中国的字符需要被识别也需要编码表于是就有了GB2 ...