文章标题
来源:互联网 发布:电脑程序编程 编辑:程序博客网 时间:2024/05/29 15:39
Android App升级流程
本文对Android App升级流程做了部分概要,讲解了怎样获取本地App版本号及获取网络App版本号,获取之后的部分操作。
升级流程图
代码部分
获取本地版本app名:
private String getVersionName(){ //包管理器 PackageManager packageManager = getPackageManager(); try { //获取包的信息 PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0); String versionName = packageInfo.versionName;//版本名 System.out.println("versionName="+versionName); return versionName; } catch (NameNotFoundException e) {//没有找到包名的时候会走此异常 e.printStackTrace(); } return ""; }
获取本地app版本号:
private int getVersionCode(){ //包管理器 PackageManager packageManager = getPackageManager(); try { //获取包的信息 PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0); int versionCode = packageInfo.versionCode;//版本号 System.out.println("versionCode="+versionCode); return versionCode; } catch (NameNotFoundException e) {//没有找到包名的时候会走此异常 e.printStackTrace(); } return -1; }
从服务器获取版本进行校验:因为需要连网获取版本信息,所以必须启动子线程,否则主线程超过5秒会堵塞并导致程序崩溃。
private void checkVersion(){ //启动子线程一部加载数据 new Thread(){ @Override public void run() { HttpURLConnection conn=null; URL url=new URL(服务器地址); conn=(HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET");//设置请求方式 conn.setConnectTimeout(5000);//设置链接超时 conn.setReadTimeout(5000);//设置响应超时,连接上了,但服务器迟迟不给响应 conn.connect();//链接服务器 int responseCode = conn.getResponseCode();//获取响应码 if(responseCode==200){ InputStream inputStream = conn.getInputStream(); String result = StreamUtils.readFromStream(inputStream); System.out.println("网络返回结果:"+result);
借助一个工具类(StreamUtils)将返回的结果转换成json格式的数据,代码如下:
public class StreamUtils { /**将输入流读取成String返回 * @throws IOException */ public static String readFromStream(InputStream in) throws IOException{ ByteArrayOutputStream out=new ByteArrayOutputStream(); int len=0; byte[] buffer=new byte[1024]; while((len=in.read(buffer))!=-1){ out.write(buffer, 0, len); } String result=out.toString(); in.close(); out.close(); return result; }}
接下来解析json字符串,拿到我们想要的版本号跟版本名:
//解析json JSONObject jo=new JSONObject(result); mVersionName = jo.getString("versionName"); mVersionCode = jo.getInt("versionCode");
接下下判断是否有更新:
if(mVersionCode>getVersionCode()){//判断是否有更新 //如果服务器的versionCode大于本地的versionCode,说明有更新 //弹出升级对话框 }对话框内容:
protected void showUpdateFialog() {
AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setTitle("最新版本:"+mVersionName); builder.setPositiveButton("立即更新", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { System.out.println("立即更新"); } }); builder.setNegativeButton("以后再说", null); builder.create().show();}
此部分有异常产生,请自行处理。签名冲突将在下一篇中继续讲解。
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- Cron Expression
- 2016SDAU编程练习二1010
- Activity与Activity调用栈分析
- ThreadLocal详解
- Android源码分析之——下载并编译源码
- 文章标题
- 216. Combination Sum III
- Linux字符设备注册与注销
- SAR成像基础知识急救箱(零)关于傅里叶变换的几个小困惑
- [剑指offer]跳台阶&变态跳台
- java jsp实现网站访问量的统计
- Exercise(5):最大子矩阵
- 写出ELGamal公钥密码算法的加密、解密过程
- HDU 5671 Matrix