您的位置:首页 > 移动开发

APP开发之版本更新检测

2015-12-11 23:17 330 查看
大家在开发APP的过程中,一开始的思想和应用的构造都不回太完善需要改进还有为了日后增添更多的功能来丰富用户体验等等,都需要更新APP的版本。这是一个很重要的知识点,那么今天我就来像大家介绍一下如何检测版本的更新。好了,介绍就先到这里,跟以前一样,用代码说事。

1.获取版本名和版本号

首先,在Androidmanifest.xml文件中都会定义有android:versionCode和android:versionName两个参数。大家有的时候都会想把这些参数信息展示给用户,所以我们先来告诉大家如何获取两个参数。在这里,我们需要PackageInfo来获取包的信息,包的信息中含有versionName和versionCode两个参数。

private int getVersionCode(){//获取版本号,与获取版本名类似,这里只获取版本号。
PackageManager packageManager=getPackageManager();//利用packageManager获取包
try {
PackageInfo packageInfo=packageManager.getPackageInfo(getPackageName(), 0);//利用packageManager获取包的信息。
//
int versionCode=packageInfo.versionCode;//获取版本号
return versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();//没有找到相关的包名则抛出异常
}
return -1;//错误返回-1
}

2.好了,我们已经完成了版本名和版本号的获取,这两个东西就是用于我们的版本更新的检测。当用户使用的版本与我们服务器上的版本匹配不一致的时候,我们就可以检测出更新了,所以我们接下来完成版本的检测。大家先想想,版本更新的检测能不能在主线程里面进行呢?答案是否定的。为什么呢?因为主线程运行超过五秒就会阻塞,这个时候我们需要异步加载数据了。让我们看看代码的实现。
private void versionCheck(){//版本检测,从服务器获取版本信息进行校验
final long startTime=System.currentTimeMillis();//网络访问初始时间
final Message message=Message.obtain();
new Thread(){//异步线程加载数据
public void run(){
HttpURLConnection httpURLConnection=null;
try {
URL url=new URL("196.168.1.1");//这里最好用IP地址 不用localhost,服务器地址
httpURLConnection=(HttpURLConnection)url.openConnection();//默认返回的是urlConnecttion我们需要的是HttpURLConnection
httpURLConnection.setRequestMethod("GET");//这里的请求方式我们选择GET或者POST
httpURLConnection.setConnectTimeout(5000);//网络连接超时5秒则抛出异常
httpURLConnection.setReadTimeout(5000);//网络连接上但服务器响应时间异常。
httpURLConnection.connect();//连接服务器

int respondCode=httpURLConnection.getResponseCode();//响应码默认为200正常
if(respondCode==200){
InputStream inputStream=httpURLConnection.getInputStream();//从服务器获取输入流,在这里我新建了一个类专门弄IO流的。
String result = AppStreamUtils.readInputStream(inputStream);
//读取解析JSON数据
JSONObject jsonObject=new JSONObject(result);
mVersionName=jsonObject.getString("versionName");//mVersionCode是要赋值给xml文件的一个TextView控件。
mVersionCode=jsonObject.getInt("versionCode");

if(mVersionCode>getVersionCode()){//如果服务器的Code大于本地dCode,则需要升级
message.what=CODE_DIALOG_UPDATE;//这里我们用Handle发送消息。
}
else{
message.what=CODE_ENTER_HOMEACTIVITY;
}
}
} catch (MalformedURLException e) {
e.printStackTrace();//当URL地址异常时抛出异常

message.what=CODE_ERROR_URL;
} catch (IOException e) {
e.printStackTrace();//网络异常时抛出异常

message.what=CODE_ERROR_IOE;
} catch (JSONException e) {
e.printStackTrace();//当传递的不是严格的JSON格式时抛出异常,JSON解析失败
message.what=CODE_ERROR_JSON;
}finally {
mHandler.sendMessage(message);
if(httpURLConnection!=null)
{
httpURLConnection.disconnect();//断开网络连接请求
}
}
}
}
}.start();//线程start

}好了,关于版本更新的检测就先介绍到这里,希望对大家有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息