版本更新
- 本文是以解析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>
效果展示:
更新完成!!!