package com.chinaece.gaia.util; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.util.Log; import com.chinaece.gaia.db.DataStorage; public class UpdateVersionInfo { private static VersionInfo versionInfo = new VersionInfo(); private static final String TAG = "AutoUpdate"; public static VersionInfo getUpdateInfo(InputStream is) throws Exception { XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance(); XmlPullParser parser = parserCreator.newPullParser(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); parser.setInput(is, "utf-8"); int type = parser.getEventType(); VersionInfo verUpdateInfo = new VersionInfo(); while (type != XmlPullParser.END_DOCUMENT) { switch (type) { case XmlPullParser.START_TAG: if ("versionCode".equals(parser.getName())) { verUpdateInfo.setVersionCode(parser.nextText()); } else if ("url".equals(parser.getName())) { verUpdateInfo.setUrl(parser.nextText()); } else if ("changelog".equals(parser.getName())) { verUpdateInfo.setchangelog(parser.nextText()); } break; } type = parser.next(); } return verUpdateInfo; } public static int getCurrentVersionCode(Context context) throws NameNotFoundException { PackageInfo packInfo = context.getPackageManager().getPackageInfo( context.getPackageName(), 0); int versionCode = packInfo.versionCode; return versionCode; } public static String getServerVerCode(Context context) { URL Url; try { Url = new URL("http://oa.china-ece.com:18081/client/android.xml"); versionInfo = UpdateVersionInfo.getUpdateInfo(Url.openStream()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } String latestverCode = versionInfo.getVersionCode(); return latestverCode; } public static void CheckVersionTask(final Context context) { new Thread(new Runnable() { public void run() { try { int versionCode = UpdateVersionInfo.getCurrentVersionCode(context); System.err.println(versionCode); File apk = new File("/sdcard/ece/ECEOA.apk"); if(apk.exists()){ PackageManager pm = context.getPackageManager(); PackageInfo packageInfo = pm.getPackageArchiveInfo(apk.getAbsolutePath(), PackageManager.GET_ACTIVITIES); if (packageInfo != null && versionCode >= packageInfo.versionCode) { apk.delete(); if(versionCode == packageInfo.versionCode) return; } } String latestverCode = UpdateVersionInfo.getServerVerCode(context); int verCode = Integer.parseInt(latestverCode); if (versionCode >= verCode) { Log.i(TAG, "版本号相同无需升级"); } else { Log.i(TAG, "版本号不同 ,提示用户升级 "); DataStorage.properties.put("changelog", versionInfo.getChangelog()); DataStorage.save(context); Downloader downLoader = new Downloader(context, versionInfo.getUrl(), "ECEOA.apk", null); new Thread(downLoader).start(); } } catch (NameNotFoundException e) { e.printStackTrace(); } } }).start(); } }