歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android自動檢測版本及自動升級

Android自動檢測版本及自動升級

日期:2017/3/1 11:11:23   编辑:Linux編程

步驟:

1.檢測當前版本的信息AndroidManifest.xml-->manifest-->android:versionName。

2.從服務器獲取版本號(版本號存在於xml文件中)並與當前檢測到的版本進行匹配,如果不匹配,提示用戶進行升級,如果匹配則進入程序主界面。

3.當提示用戶進行版本升級時,如果用戶點擊了確定,系統將自動從服務器上下載並進行自動升級,如果點擊取消將進入程序主界面。

效果圖:


獲取當前程序的版本號:

  1. /*
  2. * 獲取當前程序的版本號
  3. */
  4. private String getVersionName() throws Exception{
  5. //獲取packagemanager的實例
  6. PackageManager packageManager = getPackageManager();
  7. //getPackageName()是你當前類的包名,0代表是獲取版本信息
  8. PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(), 0);
  9. return packInfo.versionName;
  10. }
獲取服務器端的版本號:
  1. /*
  2. * 用pull解析器解析服務器返回的xml文件 (xml封裝了版本號)
  3. */
  4. public static UpdataInfo getUpdataInfo(InputStream is) throws Exception{
  5. XmlPullParser parser = Xml.newPullParser();
  6. parser.setInput(is, "utf-8");//設置解析的數據源
  7. int type = parser.getEventType();
  8. UpdataInfo info = new UpdataInfo();//實體
  9. while(type != XmlPullParser.END_DOCUMENT ){
  10. switch (type) {
  11. case XmlPullParser.START_TAG:
  12. if("version".equals(parser.getName())){
  13. info.setVersion(parser.nextText()); //獲取版本號
  14. }else if ("url".equals(parser.getName())){
  15. info.setUrl(parser.nextText()); //獲取要升級的APK文件
  16. }else if ("description".equals(parser.getName())){
  17. info.setDescription(parser.nextText()); //獲取該文件的信息
  18. }
  19. break;
  20. }
  21. type = parser.next();
  22. }
  23. return info;
  24. }
從服務器下載apk:
  1. public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{
  2. //如果相等的話表示當前的sdcard掛載在手機上並且是可用的
  3. if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
  4. URL url = new URL(path);
  5. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  6. conn.setConnectTimeout(5000);
  7. //獲取到文件的大小
  8. pd.setMax(conn.getContentLength());
  9. InputStream is = conn.getInputStream();
  10. File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");
  11. FileOutputStream fos = new FileOutputStream(file);
  12. BufferedInputStream bis = new BufferedInputStream(is);
  13. byte[] buffer = new byte[1024];
  14. int len ;
  15. int total=0;
  16. while((len =bis.read(buffer))!=-1){
  17. fos.write(buffer, 0, len);
  18. total+= len;
  19. //獲取當前下載量
  20. pd.setProgress(total);
  21. }
  22. fos.close();
  23. bis.close();
  24. is.close();
  25. return file;
  26. }
  27. else{
  28. return null;
  29. }
  30. }
Copyright © Linux教程網 All Rights Reserved