版本更新
- 本文是以解析xml的爲例
.從服務器獲取版本號(版本號存在於xml文件中)並與當前檢測到的版本進行匹配,如果不匹配,提示用戶進行升級,如果匹配則進入程序主界面。
當提示用戶進行版本升級時,如果用戶點擊了確定,系統將自動從服務器上下載並進行自動升級,如果點擊取消將進入程序主界面。
首先我們需要請求網絡的信息得到接口裏面給我們都是什麼信息
我們以這個接口爲例:(http://www.oschina.net/MobileAppVersion.xml)
以下是關鍵的一個更新的工具類:
<code class="hljs java has-numbering"><span class="hljs-keyword">import</span> java.io.BufferedInputStream; <span class="hljs-keyword">import</span> java.io.File; <span class="hljs-keyword">import</span> java.io.FileNotFoundException; <span class="hljs-keyword">import</span> java.io.FileOutputStream; <span class="hljs-keyword">import</span> java.io.IOException; <span class="hljs-keyword">import</span> java.io.InputStream; <span class="hljs-keyword">import</span> java.net.HttpURLConnection; <span class="hljs-keyword">import</span> java.net.MalformedURLException; <span class="hljs-keyword">import</span> java.net.URL; <span class="hljs-keyword">import</span> com.bwei.test.url.URLS; <span class="hljs-keyword">import</span> android.app.AlertDialog; <span class="hljs-keyword">import</span> android.app.ProgressDialog; <span class="hljs-keyword">import</span> android.app.AlertDialog.Builder; <span class="hljs-keyword">import</span> android.content.Context; <span class="hljs-keyword">import</span> android.content.DialogInterface; <span class="hljs-keyword">import</span> android.content.Intent; <span class="hljs-keyword">import</span> android.content.pm.PackageInfo; <span class="hljs-keyword">import</span> android.content.pm.PackageManager; <span class="hljs-keyword">import</span> android.content.pm.PackageManager.NameNotFoundException; <span class="hljs-keyword">import</span> android.net.Uri; <span class="hljs-keyword">import</span> android.os.Environment; <span class="hljs-keyword">import</span> android.os.Handler; <span class="hljs-keyword">import</span> android.os.Message; <span class="hljs-keyword">import</span> android.util.Log; <span class="hljs-keyword">import</span> android.widget.Button; <span class="hljs-keyword">import</span> android.widget.Toast; <span class="hljs-javadoc">/** * 更新版本的工具類 *<span class="hljs-javadoctag"> @author</span> *<span class="hljs-javadoctag"> @date</span> * */</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">UpdateVersionutil</span> {</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> String TAG = <span class="hljs-keyword">this</span>.getClass().getName(); <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> UPDATA_NONEED = <span class="hljs-number">0</span>; <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> UPDATA_CLIENT = <span class="hljs-number">1</span>; <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> GET_UNDATAINFO_ERROR = <span class="hljs-number">2</span>; <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> SDCARD_NOMOUNTED = <span class="hljs-number">3</span>; <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> DOWN_ERROR = <span class="hljs-number">4</span>; <span class="hljs-keyword">private</span> Button getVersion; <span class="hljs-keyword">private</span> String localVersion; <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Context mContext; <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> UpdateVersionutil updateVersionutil; <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">boolean</span> mNeedUpdate; InputStream is; <span class="hljs-keyword">private</span> Update parse; <span class="hljs-keyword">public</span> <span class="hljs-title">UpdateVersionutil</span>(Context mContext) { <span class="hljs-keyword">super</span>(); <span class="hljs-keyword">this</span>.mContext = mContext; } <span class="hljs-javadoc">/** * 檢測更新 */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">startUpdate</span>(){ localVersion = getVersionName(); CheckVersionTask cv = <span class="hljs-keyword">new</span> CheckVersionTask(); <span class="hljs-keyword">new</span> Thread(cv).start(); } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> UpdateVersionutil <span class="hljs-title">getUpdataManger</span>(Context context){ <span class="hljs-keyword">if</span>(updateVersionutil==<span class="hljs-keyword">null</span>){ updateVersionutil=<span class="hljs-keyword">new</span> UpdateVersionutil(context); } <span class="hljs-keyword">return</span> updateVersionutil; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">checkUpdata</span>(){ updateVersionutil.startUpdate(); } <span class="hljs-keyword">private</span> String <span class="hljs-title">getVersionName</span>() { <span class="hljs-comment">//getPackageName()是你當前類的包名,0代表是獲取版本信息 </span> PackageManager packageManager =mContext.getPackageManager(); PackageInfo packInfo = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">try</span> { packInfo = packageManager.getPackageInfo(mContext.getPackageName(), <span class="hljs-number">0</span>); } <span class="hljs-keyword">catch</span> (NameNotFoundException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } <span class="hljs-keyword">return</span> packInfo.versionName; } <span class="hljs-javadoc">/** * 網絡請求 * 獲取到網絡接口的版本號進行對比 *<span class="hljs-javadoctag"> @author</span> *<span class="hljs-javadoctag"> @date</span> */</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CheckVersionTask</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Runnable</span> {</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span>() { <span class="hljs-keyword">try</span> { <span class="hljs-comment">//這裏URLS.UPDATE_VERSION 是網絡接口獲取網絡信息</span> URL url = <span class="hljs-keyword">new</span> URL(URLS.UPDATE_VERSION); <span class="hljs-comment">//*****************************************************</span> HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setConnectTimeout(<span class="hljs-number">5000</span>); conn.setRequestMethod(<span class="hljs-string">"GET"</span>); <span class="hljs-keyword">int</span> responseCode = conn.getResponseCode(); <span class="hljs-keyword">if</span> (responseCode == <span class="hljs-number">200</span>) { <span class="hljs-comment">// 從服務器獲得一個輸入流 </span> is = conn.getInputStream(); } <span class="hljs-comment">//*******************************************</span> <span class="hljs-comment">//調用解析的方法</span> parse = Update.parse(is); Url = parse.getDownloadUrl(); <span class="hljs-comment">//**********************************************</span> System.out.println(<span class="hljs-string">"新版版本名:"</span>+parse.getVersionName()); System.out.println(<span class="hljs-string">"本地版本名:"</span>+localVersion); <span class="hljs-comment">//對比版本號</span> <span class="hljs-keyword">if</span> (parse.getVersionName().equals(localVersion)) { mNeedUpdate=<span class="hljs-keyword">false</span>; Log.i(TAG, <span class="hljs-string">"版本號相同"</span>); Message msg = <span class="hljs-keyword">new</span> Message(); msg.what = UPDATA_NONEED; handler.sendMessage(msg); <span class="hljs-comment">// LoginMain();</span> } <span class="hljs-keyword">else</span> { mNeedUpdate=<span class="hljs-keyword">true</span>; Log.i(TAG, <span class="hljs-string">"版本號不相同 "</span>); Message msg = <span class="hljs-keyword">new</span> Message(); msg.what = UPDATA_CLIENT; handler.sendMessage(msg); } } <span class="hljs-keyword">catch</span> (Exception e) { Message msg = <span class="hljs-keyword">new</span> Message(); msg.what = GET_UNDATAINFO_ERROR; handler.sendMessage(msg); e.printStackTrace(); } } } Handler handler = <span class="hljs-keyword">new</span> Handler() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">handleMessage</span>(Message msg) { <span class="hljs-comment">// TODO Auto-generated method stub</span> <span class="hljs-keyword">super</span>.handleMessage(msg); <span class="hljs-keyword">switch</span> (msg.what) { <span class="hljs-keyword">case</span> UPDATA_NONEED: Toast.makeText(mContext, <span class="hljs-string">"不需要更新"</span>, Toast.LENGTH_SHORT).show(); <span class="hljs-keyword">case</span> UPDATA_CLIENT: <span class="hljs-comment">//對話框通知用戶升級程序 </span> showUpdataDialog(); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> GET_UNDATAINFO_ERROR: <span class="hljs-comment">//服務器超時 </span> Toast.makeText(mContext, <span class="hljs-string">"獲取服務器更新信息失敗"</span>, <span class="hljs-number">1</span>).show(); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> DOWN_ERROR: <span class="hljs-comment">//下載apk失敗 </span> Toast.makeText(mContext, <span class="hljs-string">"下載新版本失敗"</span>, <span class="hljs-number">1</span>).show(); <span class="hljs-keyword">break</span>; } } }; <span class="hljs-comment">/* * * 彈出對話框通知用戶更新程序 * * 彈出對話框的步驟: * 1.創建alertDialog的builder. * 2.要給builder設置屬性, 對話框的內容,樣式,按鈕 * 3.通過builder 創建一個對話框 * 4.對話框show()出來 */</span> <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">showUpdataDialog</span>() { AlertDialog.Builder builer = <span class="hljs-keyword">new</span> Builder(mContext); builer.setTitle(<span class="hljs-string">"版本升級"</span>); <span class="hljs-comment">//*********************************************</span> <span class="hljs-comment">//更新提示語</span> builer.setMessage(parse.getUpdateLog()); <span class="hljs-comment">//*******************************************************</span> <span class="hljs-comment">//當點確定按鈕時從服務器上下載 新的apk 然後安裝 װ</span> builer.setPositiveButton(<span class="hljs-string">"立馬更新"</span>, <span class="hljs-keyword">new</span> DialogInterface.OnClickListener() { <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onClick</span>(DialogInterface dialog, <span class="hljs-keyword">int</span> which) { Log.i(TAG, <span class="hljs-string">"下載apk,更新"</span>); downLoadApk(); } }); builer.setNegativeButton(<span class="hljs-string">"稍後再說"</span>, <span class="hljs-keyword">new</span> DialogInterface.OnClickListener() { <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onClick</span>(DialogInterface dialog, <span class="hljs-keyword">int</span> which) { <span class="hljs-comment">// TODO Auto-generated method stub</span> <span class="hljs-comment">//do sth</span> } }); AlertDialog dialog = builer.create(); dialog.show(); } <span class="hljs-comment">/* * 從服務器中下載APK */</span> <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">downLoadApk</span>() { <span class="hljs-keyword">final</span> ProgressDialog pd; <span class="hljs-comment">//進度條對話框 </span> pd = <span class="hljs-keyword">new</span> ProgressDialog(mContext); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage(<span class="hljs-string">"正在下載更新"</span>); pd.show(); <span class="hljs-keyword">new</span> Thread(){ <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span>() { <span class="hljs-keyword">try</span> { File file = DownLoadManager.getFileFromServer(parse.getDownloadUrl(), pd); sleep(<span class="hljs-number">3000</span>); installApk(file); pd.dismiss(); <span class="hljs-comment">//結束掉進度條對話框 </span> } <span class="hljs-keyword">catch</span> (Exception e) { Message msg = <span class="hljs-keyword">new</span> Message(); msg.what = DOWN_ERROR; handler.sendMessage(msg); e.printStackTrace(); } }}.start(); } <span class="hljs-comment">//安裝apk </span> <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">installApk</span>(File file) { Intent intent = <span class="hljs-keyword">new</span> Intent(); <span class="hljs-comment">//執行動作 </span> intent.setAction(Intent.ACTION_VIEW); <span class="hljs-comment">//執行的數據類型 </span> intent.setDataAndType(Uri.fromFile(file), <span class="hljs-string">"application/vnd.android.package-archive"</span>); mContext.startActivity(intent); } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> String Url; <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> String <span class="hljs-title">getUrl</span>(){ <span class="hljs-keyword">return</span> Url; } <span class="hljs-javadoc">/** * 判斷SD卡是什麼狀態進行下載 *<span class="hljs-javadoctag"> @author</span> *<span class="hljs-javadoctag"> @date</span> */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DownLoadManager</span> {</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> File <span class="hljs-title">getFileFromServer</span>(String path, ProgressDialog pd) { <span class="hljs-comment">//如果相等的話表示當前的sdcard掛載在手機上並且是可用的</span> <span class="hljs-keyword">if</span>(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ URL url = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">try</span> { url = <span class="hljs-keyword">new</span> URL(path); } <span class="hljs-keyword">catch</span> (MalformedURLException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } HttpURLConnection conn = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">try</span> { conn = (HttpURLConnection) url.openConnection(); } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } conn.setConnectTimeout(<span class="hljs-number">5000</span>); <span class="hljs-comment">//獲取到文件的大小 </span> pd.setMax(conn.getContentLength()); InputStream is = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">try</span> { is = conn.getInputStream(); } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } File file = <span class="hljs-keyword">new</span> File(Environment.getExternalStorageDirectory(), <span class="hljs-string">"updata.apk"</span>); FileOutputStream fos = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">try</span> { fos = <span class="hljs-keyword">new</span> FileOutputStream(file); } <span class="hljs-keyword">catch</span> (FileNotFoundException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } BufferedInputStream bis = <span class="hljs-keyword">new</span> BufferedInputStream(is); <span class="hljs-keyword">byte</span>[] buffer = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[<span class="hljs-number">1024</span>]; <span class="hljs-keyword">int</span> len ; <span class="hljs-keyword">int</span> total=<span class="hljs-number">0</span>; <span class="hljs-keyword">try</span> { <span class="hljs-keyword">while</span>((len =bis.read(buffer))!=-<span class="hljs-number">1</span>){ fos.write(buffer, <span class="hljs-number">0</span>, len); total+= len; <span class="hljs-comment">//獲取當前下載量</span> pd.setProgress(total); } } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } <span class="hljs-keyword">try</span> { fos.close(); } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } <span class="hljs-keyword">try</span> { bis.close(); } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } <span class="hljs-keyword">try</span> { is.close(); } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } <span class="hljs-keyword">return</span> file; } <span class="hljs-keyword">else</span>{ <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>; } } } } </code>
上面的代碼中我們需要用到獲取到信息之後進行解析,這裏我用的紙xml:
<code class="hljs java has-numbering"><span class="hljs-javadoc">/** * 解析獲取到輸入流 *<span class="hljs-javadoctag"> @param</span> inputStream *<span class="hljs-javadoctag"> @return</span> */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Update <span class="hljs-title">parse</span>(InputStream inputStream){ Update update = <span class="hljs-keyword">null</span>; <span class="hljs-comment">//獲得XmlPullParser解析器</span> XmlPullParser xmlParser = Xml.newPullParser(); <span class="hljs-keyword">try</span> { xmlParser.setInput(inputStream, UTF8); <span class="hljs-comment">//獲得解析到的事件類別,這裏有開始文檔,結束文檔,開始標籤,結束標籤,文本等等事件。</span> <span class="hljs-keyword">int</span> evtType=xmlParser.getEventType(); <span class="hljs-comment">//一直循環,直到文檔結束 </span> <span class="hljs-keyword">while</span>(evtType!=XmlPullParser.END_DOCUMENT){ String tag = xmlParser.getName(); <span class="hljs-keyword">switch</span>(evtType){ <span class="hljs-keyword">case</span> XmlPullParser.START_TAG: <span class="hljs-comment">//通知信息</span> <span class="hljs-keyword">if</span>(tag.equalsIgnoreCase(<span class="hljs-string">"android"</span>)) { update = <span class="hljs-keyword">new</span> Update(); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(update != <span class="hljs-keyword">null</span>) { <span class="hljs-keyword">if</span>(tag.equalsIgnoreCase(<span class="hljs-string">"versionCode"</span>)) { <span class="hljs-comment">//字符轉換整數 </span> update.setVersionCode(toInt(xmlParser.nextText(),<span class="hljs-number">0</span>)); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(tag.equalsIgnoreCase(<span class="hljs-string">"versionName"</span>)) { update.setVersionName(xmlParser.nextText()); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(tag.equalsIgnoreCase(<span class="hljs-string">"downloadUrl"</span>)) { update.setDownloadUrl(xmlParser.nextText()); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(tag.equalsIgnoreCase(<span class="hljs-string">"updateLog"</span>)) { update.setUpdateLog(xmlParser.nextText()); } } <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> XmlPullParser.END_TAG: <span class="hljs-keyword">break</span>; } <span class="hljs-comment">//如果xml沒有結束,則導航到下一個節點</span> evtType=xmlParser.next(); } } <span class="hljs-keyword">catch</span> (XmlPullParserException e) { e.printStackTrace(); } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } <span class="hljs-keyword">finally</span> { <span class="hljs-keyword">try</span> { inputStream.close(); } <span class="hljs-keyword">catch</span> (IOException e) { <span class="hljs-comment">// TODO Auto-generated catch block</span> e.printStackTrace(); } } <span class="hljs-keyword">return</span> update; } <span class="hljs-javadoc">/** * 字符串轉整數 *<span class="hljs-javadoctag"> @param</span> str *<span class="hljs-javadoctag"> @param</span> defValue *<span class="hljs-javadoctag"> @return</span> */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> <span class="hljs-title">toInt</span>(String str, <span class="hljs-keyword">int</span> defValue) { <span class="hljs-keyword">try</span>{ <span class="hljs-keyword">return</span> Integer.parseInt(str); }<span class="hljs-keyword">catch</span>(Exception e){} <span class="hljs-keyword">return</span> defValue; }</code>
不要忘記了要寫相應的bean類:
<code class="hljs java has-numbering"><span class="hljs-javadoc">/** * 應用程序更新實體類 *<span class="hljs-javadoctag"> @author</span> *<span class="hljs-javadoctag"> @date</span> */</span> <span class="hljs-annotation">@SuppressWarnings</span>(<span class="hljs-string">"serial"</span>) <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Update</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Serializable</span>{</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> String UTF8 = <span class="hljs-string">"UTF-8"</span>; <span class="hljs-keyword">public</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> String NODE_ROOT = <span class="hljs-string">"oschina"</span>; <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> versionCode; <span class="hljs-keyword">private</span> String versionName; <span class="hljs-keyword">private</span> String downloadUrl; <span class="hljs-keyword">private</span> String updateLog; <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getVersionCode</span>() { <span class="hljs-keyword">return</span> versionCode; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setVersionCode</span>(<span class="hljs-keyword">int</span> versionCode) { <span class="hljs-keyword">this</span>.versionCode = versionCode; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getVersionName</span>() { <span class="hljs-keyword">return</span> versionName; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setVersionName</span>(String versionName) { <span class="hljs-keyword">this</span>.versionName = versionName; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getDownloadUrl</span>() { <span class="hljs-keyword">return</span> downloadUrl; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setDownloadUrl</span>(String downloadUrl) { <span class="hljs-keyword">this</span>.downloadUrl = downloadUrl; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getUpdateLog</span>() { <span class="hljs-keyword">return</span> updateLog; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUpdateLog</span>(String updateLog) { <span class="hljs-keyword">this</span>.updateLog = updateLog; }</code>
然後我們調用這個就可以了
注意上下文
<code class="hljs avrasm has-numbering">UpdateVersionutil<span class="hljs-preprocessor">.getUpdataManger</span>(this)<span class="hljs-preprocessor">.startUpdate</span>()<span class="hljs-comment">;</span></code>
效果展示:
更新完成!!!