亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android編程實現自動檢測版本及自動升級的方法

2020-04-11 11:04:31
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程實現自動檢測版本及自動升級的方法。分享給大家供大家參考,具體如下:

步驟:

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;  }}

匹配、下載、自動安裝:

/* * 從服務器獲取xml解析并進行比對版本號 */public class CheckVersionTask implements Runnable{  public void run() {    try {      //從資源文件獲取服務器 地址      String path = getResources().getString(R.string.serverurl);      //包裝成url的對象      URL url = new URL(path);      HttpURLConnection conn = (HttpURLConnection) url.openConnection();      conn.setConnectTimeout(5000);      InputStream is =conn.getInputStream();      info = UpdataInfoParser.getUpdataInfo(is);      if(info.getVersion().equals(versionname)){        Log.i(TAG,"版本號相同無需升級");        LoginMain();      }else{        Log.i(TAG,"版本號不同 ,提示用戶升級 ");        Message msg = new Message();        msg.what = UPDATA_CLIENT;        handler.sendMessage(msg);      }    } catch (Exception e) {      // 待處理      Message msg = new Message();      msg.what = GET_UNDATAINFO_ERROR;      handler.sendMessage(msg);      e.printStackTrace();    }  }}Handler handler = new Handler(){  @Override  public void handleMessage(Message msg) {    // TODO Auto-generated method stub    super.handleMessage(msg);    switch (msg.what) {    case UPDATA_CLIENT:      //對話框通知用戶升級程序      showUpdataDialog();      break;    case GET_UNDATAINFO_ERROR:      //服務器超時      Toast.makeText(getApplicationContext(), "獲取服務器更新信息失敗", 1).show();      LoginMain();      break;    case DOWN_ERROR:      //下載apk失敗      Toast.makeText(getApplicationContext(), "下載新版本失敗", 1).show();      LoginMain();      break;    }  }};/* * * 彈出對話框通知用戶更新程序 * * 彈出對話框的步驟: * 1.創建alertDialog的builder. * 2.要給builder設置屬性, 對話框的內容,樣式,按鈕 * 3.通過builder 創建一個對話框 * 4.對話框show()出來 */protected void showUpdataDialog() {  AlertDialog.Builder builer = new Builder(this) ;  builer.setTitle("版本升級");  builer.setMessage(info.getDescription());  //當點確定按鈕時從服務器上下載 新的apk 然后安裝  builer.setPositiveButton("確定", new OnClickListener() {  public void onClick(DialogInterface dialog, int which) {      Log.i(TAG,"下載apk,更新");      downLoadApk();    }  });  //當點取消按鈕時進行登錄  builer.setNegativeButton("取消", new OnClickListener() {    public void onClick(DialogInterface dialog, int which) {      // TODO Auto-generated method stub      LoginMain();    }  });  AlertDialog dialog = builer.create();  dialog.show();}/* * 從服務器中下載APK */protected void downLoadApk() {  final ProgressDialog pd;  //進度條對話框  pd = new ProgressDialog(this);  pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  pd.setMessage("正在下載更新");  pd.show();  new Thread(){    @Override    public void run() {      try {        File file = DownLoadManager.getFileFromServer(info.getUrl(), pd);        sleep(3000);        installApk(file);        pd.dismiss(); //結束掉進度條對話框      } catch (Exception e) {        Message msg = new Message();        msg.what = DOWN_ERROR;        handler.sendMessage(msg);        e.printStackTrace();      }    }}.start();}//安裝apkprotected void installApk(File file) {  Intent intent = new Intent();  //執行動作  intent.setAction(Intent.ACTION_VIEW);  //執行的數據類型  intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");  startActivity(intent);}/* * 進入程序的主界面 */private void LoginMain(){  Intent intent = new Intent(this,MainActivity.class);  startActivity(intent);  //結束掉當前的activity  this.finish();}

UpdataInfo:

public class UpdataInfo {  private String version;  private String url;  private String description;  public String getVersion() {    return version;  }  public void setVersion(String version) {    this.version = version;  }  public String getUrl() {    return url;  }  public void setUrl(String url) {    this.url = url;  }  public String getDescription() {    return description;  }  public void setDescription(String description) {    this.description = description;  }}

update.xml:

<?xml version="1.0" encoding="utf-8"?><info>  <version>2.0</version>  <url>http://192.168.1.187:8080/mobilesafe.apk</url>  <description>檢測到最新版本,請及時更新!</description></info>

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩一区二区在线| 51色欧美片视频在线观看| xxx成人少妇69| 亚洲精品www久久久| 亚洲一区第一页| 国产剧情日韩欧美| 视频直播国产精品| 国产精品综合久久久| 亚洲成人av在线| 日韩欧中文字幕| 成人午夜在线观看| 国产精品电影网站| 国产亚洲精品一区二区| 91国产视频在线播放| 国产精品久久久久久亚洲调教| 日韩av最新在线| 97超级碰在线看视频免费在线看| 日韩亚洲成人av在线| 国产精品一区二区三| 日韩精品视频观看| 久久影视电视剧免费网站清宫辞电视| 精品国产自在精品国产浪潮| 久久亚洲私人国产精品va| 久久艹在线视频| 亚洲国产女人aaa毛片在线| 亚洲97在线观看| 欧美精品激情视频| 亚洲第一av网| 亚洲精品中文字幕有码专区| 色老头一区二区三区| 精品久久久久久久久中文字幕| 热re91久久精品国99热蜜臀| 日韩视频在线一区| 亚洲国产高清高潮精品美女| 久久精品电影一区二区| 在线电影欧美日韩一区二区私密| 国产日韩欧美日韩大片| 国产精品一久久香蕉国产线看观看| 国产专区精品视频| 亚洲精品免费网站| 亚洲电影免费观看| 美女黄色丝袜一区| 国产成人高潮免费观看精品| 亚洲夜晚福利在线观看| 亚洲性av在线| 久久久av电影| 中文字幕在线看视频国产欧美| 在线日韩第一页| 欧美日韩黄色大片| 亚洲xxxx3d| 欧美激情亚洲一区| 国产九九精品视频| 精品视频www| 日韩激情av在线免费观看| 91免费欧美精品| 国产一区二区三区视频在线观看| 日韩精品免费看| 亚洲精品乱码久久久久久金桔影视| 亚洲图片在区色| 色偷偷偷亚洲综合网另类| 国产精品日韩一区| 久久精品国产免费观看| 性欧美长视频免费观看不卡| 日韩精品视频在线| 国产一区二区三区在线免费观看| 国产精品自产拍在线观| 人妖精品videosex性欧美| 日本午夜在线亚洲.国产| 久久亚洲国产精品| 欧美成人激情在线| 亚洲最大av网站| 日韩精品久久久久久福利| 精品久久久久久久久久久| 91久久嫩草影院一区二区| 亚洲国产成人精品一区二区| 中文字幕欧美亚洲| 色爱av美腿丝袜综合粉嫩av| 日韩精品免费视频| 欧美第一黄网免费网站| 国产一区二区黑人欧美xxxx| 欧美激情免费在线| 91久久精品国产91久久性色| 欧美成人午夜剧场免费观看| 欧美黄色成人网| 狠狠久久亚洲欧美专区| 在线看国产精品| 欧美人与性动交| 亚洲免费影视第一页| 91日本在线观看| 日韩在线视频播放| 俺去了亚洲欧美日韩| 国产精品狼人色视频一区| 日韩中文字幕第一页| 91丝袜美腿美女视频网站| 日本老师69xxx| 日本乱人伦a精品| 欧美成人精品在线观看| 综合136福利视频在线| 9.1国产丝袜在线观看| 久久在线免费视频| 国产精品普通话| 欧美在线观看一区二区三区| 欧洲美女免费图片一区| 国产偷亚洲偷欧美偷精品| 欧美最猛性xxxxx(亚洲精品)| 国产suv精品一区二区三区88区| 欧美性xxxxxxxxx| 亚洲精品v天堂中文字幕| 51视频国产精品一区二区| 中文字幕欧美日韩精品| 久久影视三级福利片| 欧美激情二区三区| 欧美精品在线网站| 亚洲2020天天堂在线观看| 亚洲女人天堂av| 国产精品v片在线观看不卡| 国产精品欧美激情在线播放| 国产一区二区在线免费视频| 一本大道亚洲视频| 欧美日韩999| 欧美大胆a视频| 夜夜嗨av色综合久久久综合网| 日本欧美在线视频| 亚洲理论片在线观看| 亚洲第一福利在线观看| 午夜精品一区二区三区在线视频| 国产欧美精品一区二区三区介绍| 国内精品视频久久| 78m国产成人精品视频| 中文字幕在线看视频国产欧美在线看完整| 成人天堂噜噜噜| 欧美日韩国产综合视频在线观看中文| 一区二区三区四区精品| 91国产一区在线| 亚洲成av人片在线观看香蕉| 成人在线中文字幕| 日韩大片免费观看视频播放| 亚洲国产日韩欧美在线动漫| 日韩欧美在线网址| 粉嫩av一区二区三区免费野| 欧美日韩日本国产| 国产精品高潮在线| 777精品视频| 国产成人精品久久二区二区91| 日韩精品免费综合视频在线播放| 黑人与娇小精品av专区| 亚洲国产精品成人av| 2019av中文字幕| 欧美在线激情视频| 国产精品久久久久久久久粉嫩av| 欧美人与物videos| 九九热r在线视频精品| 国内外成人免费激情在线视频| 亚洲最大福利网| 午夜精品福利电影| 久久精品国产亚洲精品2020| 亚洲大胆人体av| 欧美性猛交xxxx偷拍洗澡| 日本久久久久久| 全亚洲最色的网站在线观看| 蜜臀久久99精品久久久无需会员| 久久综合免费视频| 日本一区二区三区在线播放| 久久这里有精品视频|