- 版本更新我们还可以使用一些第三方的资源
- 下面笔者来一一介绍:
- 版本更的实现思路我就不一一说了,不了解的看笔者的 版本更新篇。
- 这里我们说一下第三方的应用:
- 大家可以根据笔者的这个地址下载 jar包
点击下载 - 说一下怎么应用这个第三方:
- 我们更新都会有一个更新的接口 我以这个为例吧
- http://www.oschina.net/MobileAppVersion.xml
- 这里我解析的是xml的,可以根据你的类型自行解析。
- 首相根据接口请求网络
public void requestData(){
new Thread(){
public void run() {
try {
URL url = new URL("http://www.oschina.net/MobileAppVersion.xml");
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
//获取到输入流
InputStream inputStream = conn.getInputStream();
//*****************************************
//调用解析
Update parse = Update.parse(inputStream);
Message msg=Message.obtain();
msg.what=0;
msg.obj=parse;
handelr.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
- 解析
/**
* 解析获取到输入流
* @param inputStream
* @return
*/
public static Update parse(InputStream inputStream){
Update update = null;
//获得XmlPullParser解析器
XmlPullParser xmlParser = Xml.newPullParser();
try {
xmlParser.setInput(inputStream, UTF8);
//获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。
int evtType=xmlParser.getEventType();
//一直循环,直到文档结束
while(evtType!=XmlPullParser.END_DOCUMENT){
String tag = xmlParser.getName();
switch(evtType){
case XmlPullParser.START_TAG:
//通知信息
if(tag.equalsIgnoreCase("android"))
{
update = new Update();
}
else if(update != null)
{
if(tag.equalsIgnoreCase("versionCode"))
{ //字符转换整数
update.setVersionCode(toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("versionName"))
{
update.setVersionName(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("downloadUrl"))
{
update.setDownloadUrl(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("updateLog"))
{
update.setUpdateLog(xmlParser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
break;
}
//如果xml没有结束,则导航到下一个节点
evtType=xmlParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return update;
}
/**
* 字符串转整数
* @param str
* @param defValue
* @return
*/
public static int toInt(String str, int defValue) {
try{
return Integer.parseInt(str);
}catch(Exception e){}
return defValue;
}
上面是需要bean实体类的:
/**
* 解析获取到输入流
* @param inputStream
* @return
*/
public static Update parse(InputStream inputStream){
Update update = null;
//获得XmlPullParser解析器
XmlPullParser xmlParser = Xml.newPullParser();
try {
xmlParser.setInput(inputStream, UTF8);
//获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。
int evtType=xmlParser.getEventType();
//一直循环,直到文档结束
while(evtType!=XmlPullParser.END_DOCUMENT){
String tag = xmlParser.getName();
switch(evtType){
case XmlPullParser.START_TAG:
//通知信息
if(tag.equalsIgnoreCase("android"))
{
update = new Update();
}
else if(update != null)
{
if(tag.equalsIgnoreCase("versionCode"))
{ //字符转换整数
update.setVersionCode(toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("versionName"))
{
update.setVersionName(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("downloadUrl"))
{
update.setDownloadUrl(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("updateLog"))
{
update.setUpdateLog(xmlParser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
break;
}
//如果xml没有结束,则导航到下一个节点
evtType=xmlParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return update;
}
/**
* 字符串转整数
* @param str
* @param defValue
* @return
*/
public static int toInt(String str, int defValue) {
try{
return Integer.parseInt(str);
}catch(Exception e){}
return defValue;
}
下面我们在中的操作:
Handler handelr=new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what==0){
Update parse = (Update) msg.obj;
//*************************************************
//注意我们要传进来的参数
//getDownloadUrl url路径
//MainActivity.this 上下文
//getVersionName() 版本号
//getUpdateLog() 弹出的界面现实的内容
UpdateVersionutil uv =
UpdateVersionutil.getUpdataManger(parse.getDownloadUrl(), MainActivity.this, parse.getVersionName(), parse.getUpdateLog());
//调用检测版本
uv.checkUpdata();
}
}
};
注意:要添加连接网络的权限哦!
效果我就展示了和前面的效果一样。
代码实现版本更新:http://blog.csdn.net/qq_34476727/article/details/52045764