Android--版本更新
https://files.cnblogs.com/xiaxiaoli/version.xml
https://files.cnblogs.com/xiaxiaoli/Version.apk
给大家提供一个Android版本更新的demo,如下:
源代码:
package com.android; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import org.xmlpull.v1.XmlPullParser; import android.app.ProgressDialog; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.Xml; public class UpdateVersion { public final String TAG = this.getClass().getName(); public final static int UPDATA_NONEED = 0; public final static int UPDATA_CLIENT = 1; public final static int GET_UNDATAINFO_ERROR = 2; public final static int SDCARD_NOMOUNTED = 3; public final static int DOWN_ERROR = 4; public final static int UPDATA_CLIENT_FORCE = 5; private UpdataInfo info; private int localVerCode = -1; private CheckVersionTask cv; private Thread mThread; private String urlStr; private Handler handler; private ProgressDialog progressDialog; private Context mContext; public UpdateVersion(Context context, String url, Handler handler) { super(); this.handler = handler; this.urlStr = url; this.mContext = context; progressDialog = ProgressDialog.show(mContext, "", "正在检测,请稍后.."); progressDialog.setCancelable(true); progressDialog.setCanceledOnTouchOutside(false); } public void setLocalVerCode(int vercode){ this.localVerCode = vercode; } public void start(){ cv = new CheckVersionTask(); mThread = new Thread(cv); mThread.start(); } /* * 从服务器获取xml解析并进行比对版本号 */ public class CheckVersionTask implements Runnable { public void run() { try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setConnectTimeout(5000); InputStream is = conn.getInputStream(); info = getUpdataInfo(is); progressDialog.dismiss(); Message msg = new Message(); if (Integer.parseInt(info.getVercode()) > localVerCode) { if (info.getForce() == 1) { msg.what = UPDATA_CLIENT_FORCE; }else { msg.what = UPDATA_CLIENT; } } else { msg.what = UPDATA_NONEED; } msg.obj = info; handler.sendMessage(msg); } catch (Exception e) { // 待处理 Message msg = new Message(); msg.what = GET_UNDATAINFO_ERROR; msg.obj = info; handler.sendMessage(msg); e.printStackTrace(); } } } /* * 用pull解析器解析服务器返回的xml文件 (xml封装了版本号) */ public static UpdataInfo getUpdataInfo(InputStream is) throws Exception{ XmlPullParser parser = Xml.newPullParser(); parser.setInput(is, "utf-8");//设置解析的数据源 int type = parser.getEventType(); UpdataInfo info = new UpdataInfo();//实体 while(type != XmlPullParser.END_DOCUMENT ){ switch (type) { case XmlPullParser.START_TAG: if("vercode".equals(parser.getName())){ info.setVercode(parser.nextText()); //获取版本号 }else if ("vername".equals(parser.getName())){ info.setVername(parser.nextText()); //获取版本名称 }else if ("url".equals(parser.getName())){ info.setUrl(parser.nextText()); //获取要升级的APK文件 }else if ("appname".equals(parser.getName())){ info.setAppname(parser.nextText()); //获取app名称 }else if ("apkname".equals(parser.getName())){ info.setApkname(parser.nextText()); //获取apk名称 }else if ("force".equals(parser.getName())){ info.setForce(Integer.parseInt(parser.nextText())); //获取apk名称 } break; } type = parser.next(); } return info; } }
浙公网安备 33010602011771号