Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android在線升級相關筆記一(解析服務器版本與當前版本比較)

Android在線升級相關筆記一(解析服務器版本與當前版本比較)

編輯:關於Android編程

大概流程:Android客戶端去訪問服務器上的封裝了版本號等信息的xml文件,對服務器上的版本和當前版本進行比較,

如果低於服務器的版本,則下載服務器上的新版軟件,進行安裝替換,完成升級。


一、首先用tomcat搭建服務器,用於開發測試。

下載tomcat請參考:http://blog.csdn.net/only_tan/article/details/25110625

1.在tomcat中新建自己的項目:

\apache-tomcat-6.0.39\webapps 目錄下新建自己的項目文件夾,如myapp

然後在myapp文件夾中放入xml,apk等文件;

如,我的myapp項目中放入了upgrade.xml和一個Test.apk文件;

2.訪問自己的項目:

PC浏覽器打開xml:http://localhost:8080/myapp/upgrade.xml

Android設備打開xml:http://10.0.2.2:8080/myapp/upgrade.xml(或將10.0.2.2換成本機IP)

打開apk文件方法同理,正常情況會彈出下載對話框。

如,Test.apk的下載地址http://10.0.2.2:8080/myapp/Test.apk

如果tomcat中的文件不可下載(如apk等)訪問錯誤,解決如下:

方法1:

把要下載的文件放到tomcat/webapps/ROOT目錄下,訪問http://本機IP:8080/下載的文件名(或http://10.0.2.2:8080/文件名);

方法2:在apache-tomcat-6.0.39\conf\web.xml中添加以下內容:

 
doc
application/msword 
 
 
xls 
application/msexcel 
 
 
pdf 
application/pdf 

 
zip 
application/zip 

 
rar 
application/rar 

 
txt 
application/txt 

 
chm 
application/mshelp
保存,然後重啟tomcat即可。

二、訪問服務器,解析xml文件內容;

1.服務器上的xml文件內容:(裡面主要有3個元素,版本號、url地址、相關信息)


2
http://10.0.2.2:8080/myapp/Test.apk
版本更新至2.0,謝謝!

2. 新建一個實體類:(針對xml內容,封裝需要得到的版本等元素)

public class UpdataInfo {

    private int version;  
    private String url;  
    private String about;  
    
    public int getVersion() {  
        return version;  
    }  
    public void setVersion(int version) {  
        this.version = version;  
    }  
    public String getUrl() {  
        return url;  
    }  
    public void setUrl(String url) {  
        this.url = url;  
    }  
    public String getAbout() {  
        return about;  
    }  
    public void setAbout(String about) {  
        this.about = about;  
    }  
    
}
3.用pull解析器解析xml內容;(需傳入一個InputStream)
    public UpdataInfo getUpdataInfo(InputStream is) throws Exception{
         
         UpdataInfo info = null;
        XmlPullParser  parser = Xml.newPullParser();    
        parser.setInput(is, "GB2312");//設置解析的數據源,編碼格式   
        int event = parser.getEventType();  
        while(event != XmlPullParser.END_DOCUMENT ){  
            switch (event) {  
            case XmlPullParser.START_DOCUMENT: //開始解析    
                //可在此做初始化相關工作    
                info = new UpdataInfo();
Log.i("UpdatePullParser", "--START_DOCUMENT--");      
                break;     
            case XmlPullParser.START_TAG:  
Log.i("UpdatePullParser", "--START_TAG--"); 
                String tag = parser.getName();
                if("version".equals(tag)){  
                    info.setVersion(new Integer(parser.nextText())); //獲取版本號  
                }else if ("url".equals(tag)){  
                    info.setUrl(parser.nextText()); //獲取url地址  
                }else if ("about".equals(tag)){  
                    info.setAbout(parser.nextText()); //獲取相關信息  
                }  
                break;  
            case XmlPullParser.END_TAG://讀完一個元素,如有多個元素,存入容器中  
                break;
            default: 
                break;
            }  
            event = parser.next();  
        }        
        return info;   //返回一個UpdataInfo實體
    }

4.獲取xml內容,返回一個InputStream,以便解析所需;

  public InputStream getXml() throws Exception {
 	 String TAG="URLConnect";
         String httpUrl = "http://10.0.2.2:8080/myapp/upgrade.xml";        

        HttpURLConnection conn = (HttpURLConnection)new URL(httpUrl).openConnection();
        conn.setReadTimeout(5*1000);  //設置連接超時的時間
  //    conn.setRequestMethod("GET");
        conn.connect(); //開始連接
        if(conn.getResponseCode() == 200){
            InputStream is = conn.getInputStream();
            return is;   //返回InputStream 
        } else {
  Log.e(TAG, "---連接失敗---");
        }
        conn.disconnect(); //斷開連接
        return null;
    }
5.在某個觸發事件中進行調用,得到服務器的版本號;

 private int mLocalVersion = 1;  //本地版本
 private int mServerVersion = 2; //服務器版本
//調用獲得和解析xml的方法,(異步或線程中操作);
private void check(){     
  	new Thread(){
            @Override
            public void run(){
            //需要在線程執行的方法
                try {
                 InputStream is = getXml();   //獲取xml內容
                 UpdataInfo info = getUpdataInfo(is);  //調用解析方法
		mServerVersion = info.getVersion();  //獲得服務器版本
 Log.i(TAG, "check--infoVersion="+info.getVersion()+"infoURL="+info.getUrl()
         +"infoAbout="+info.getAbout());
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }      
            //給handler發送一個消息
            mHandler.sendEmptyMessage(new Message().what=1);
            	}
            }.start();
	}
//Handler消息接收機制
 private Handler mHandler =new Handler(){
   //Handler接收到相應消息進行刷新ui等操作
    public void handleMessage(Message msg){
    super.handleMessage(msg);
        if(msg.what == 1){
	      //收到消息,在此進行ui相關操作,如將解析的內容顯示出來。
        }    
     }
  };
6.獲取本地版本號,與服務器的版本號對比;
//獲取本地版本方法
    void getLocal(){
        PackageInfo packageInfo;
        try {
            packageInfo = getApplicationContext()
                    .getPackageManager().getPackageInfo(getPackageName(), 0);
            mLocalVersion = packageInfo.versionCode;
        } catch (NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
到這裡,服務器的版本號和本地版本號都已有了,剩下的就是比較大小;

 if(mLocalVersion < mServerVersion){
                      //有新版本,需要升級
                  } else {
                      //不需升級
                  }

------------------------------OK先記錄到這裡,有空再繼續-------------------thanks!-------------------




  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved