編輯:關於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中添加以下內容:
保存,然後重啟tomcat即可。doc application/msword xls application/msexcel application/pdf zip application/zip rar application/rar txt application/txt chm application/mshelp
二、訪問服務器,解析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!-------------------
View的平滑滾動效果什麼是實現View的平滑滾動效果呢,舉個簡單的例子,一個View從在我們指定的時間內從一個位置滾動到另外一個位置,我們利用Scroller類可以實現
前言本自定義控件參考自鴻洋大神的自定義控件,基於原來的控件效果進行修改,著重實現了以下效果:位置自動修正以及滑動結束的回調。我們先來看看效果圖:上面的圖片是一個Image
ListView的下拉刷新很常見,很多開源的框架都能做到這個效果,當然也可以自己去實現。本篇案例是基於xlistview的。布局:<RelativeLayout x
預備知識 android手機的內部存儲設備分RAM和ROM,RAM是運行內存,掉電就會失去所有內容;ROM中的內容掉電後也不會丟失。 比如一台手機的規格