版本更新

版本更新

  • 本文是以解析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>

效果展示:

這裏寫圖片描述
這裏寫圖片描述

更新完成!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章