步驟:
1.檢測當前版本的信息AndroidManifest.xml-->manifest-->android:versionName。
2.從服務器獲取版本號(版本號存在於xml文件中)並與當前檢測到的版本進行匹配,如果不匹配,提示用戶進行升級,如果匹配則進入程序主界面。
3.當提示用戶進行版本升級時,如果用戶點擊了確定,系統將自動從服務器上下載並進行自動升級,如果點擊取消將進入程序主界面。
效果圖:
獲取當前程序的版本號:
- /*
- * 獲取當前程序的版本號
- */
- private String getVersionName() throws Exception{
- //獲取packagemanager的實例
- PackageManager packageManager = getPackageManager();
- //getPackageName()是你當前類的包名,0代表是獲取版本信息
- PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(), 0);
- return packInfo.versionName;
- }
獲取服務器端的版本號:
- /*
- * 用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("version".equals(parser.getName())){
- info.setVersion(parser.nextText()); //獲取版本號
- }else if ("url".equals(parser.getName())){
- info.setUrl(parser.nextText()); //獲取要升級的APK文件
- }else if ("description".equals(parser.getName())){
- info.setDescription(parser.nextText()); //獲取該文件的信息
- }
- break;
- }
- type = parser.next();
- }
- return info;
- }
從服務器下載apk:
- public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{
- //如果相等的話表示當前的sdcard掛載在手機上並且是可用的
- if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
- URL url = new URL(path);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setConnectTimeout(5000);
- //獲取到文件的大小
- pd.setMax(conn.getContentLength());
- InputStream is = conn.getInputStream();
- File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");
- FileOutputStream fos = new FileOutputStream(file);
- BufferedInputStream bis = new BufferedInputStream(is);
- byte[] buffer = new byte[1024];
- int len ;
- int total=0;
- while((len =bis.read(buffer))!=-1){
- fos.write(buffer, 0, len);
- total+= len;
- //獲取當前下載量
- pd.setProgress(total);
- }
- fos.close();
- bis.close();
- is.close();
- return file;
- }
- else{
- return null;
- }
- }