1. 程式人生 > >Android(2)—Mono For Android App版本自動更新

Android(2)—Mono For Android App版本自動更新

  0.前言

  公司Android查詢的專案已經開始,整體採用Java後臺+App前臺來實現,由於專案小,App這塊就我一個人開發,首先需要研究的是:Android版本的更新升級問題;本人經過近一週的學習整理,

終於有了個Demo,開發環境:VS2012+Mono4.8.00013破解版  測試手機:三星I9220 Note1

  1.已實現的功能和邏輯

  1)採用後臺服務的方式進行下載

  2)下載過程中通知欄顯示,並顯示下載進度

  3)下載介面採用非同步方式更新進度條

  4)下載完成後點選進行安裝-啟動新版本

  2.已知BUG和待完善的地方

  1)BUG-從通知欄進入更新介面後,然後按返回鍵-接著再從通知欄進入更新介面,更新介面的資料就完全被初始化了

  2)待完善-更新過程中切換通知欄和介面間有點卡

  3)待完善-下載完成後點選通知欄,通知欄的資訊未消失

  4)待完善-安裝完成後未刪除下載的程式

  5)待完善-下載過程中需要在通知欄一直顯示,類似於微信未讀資訊的顯示

  6)待完善-未新增下載過程中暫停的操作

  7)待完善-網路異常及超時未處理

  3.程式實現(1)- 更新邏輯

  谷歌建議我們使用VersionCode自增來表明版本升級,無論是大的改動還是小的改動,而VersionName是顯示給使用者的軟體版本。所以我們選擇VersionCode作為我們定義版本升級的引數。

  而定義VersionCode是在AndroidManifest.xml檔案中manifest節點中增加android:versionCode="1" android:versionName="1.0",然後與伺服器端版本進行比較,實現如下:

      

  4.程式實現(2)- 建立服務

  為了在更新的過程中使用者能夠同時操作App,我們需要將下載的過程用服務來實現,服務中需要做的就是通知欄顯示、下載更新和重新整理下載進度全域性變數,以便下載介面獲取;

                 

  5.程式實現(3)- 非同步重新整理進度條

  為了友好地使用者操作,下載過程中需要重新整理介面中的進度條和文字資訊,以告訴使用者下載未停止,這裡採用的是非同步的方式,非同步DoInBackground方法中需要執行PublishProgress函式

OnProgressUpdate方法才會起作用,可以理解為後臺推送進度的更改,這樣才會觸發OnProgressUpdate事件;

   

  6.程式實現(4)- 下載完成後進行安裝

  下載完成後需要讓使用者安裝程式,安裝的程式碼如下,我之所以單獨帖出來,是因為這個地方卡了很久,之前就少了一句,希望對大家有所幫助:

1  public static void InstallNewApk(Context m_Context)
2 {
3     Intent ite = new Intent(Intent.ActionView);
4     string filePath = m_Context.Resources.GetString(Resource.String.FilePath);
5     var uriPath = Android.Net.Uri.Parse(@"file://" + filePath);
6      ite.SetDataAndType(uriPath, @"application/vnd.android.package-archive");
7      ite.SetFlags(ActivityFlags.NewTask);//這句很關鍵,沒有這句安裝完成後不會彈出“完成”和“開啟”的對話方塊;
8      m_Context.StartActivity(ite);
9 }

  7.測試方法  

  本地安裝1.0版本,然後將2.0的版本放到服務端,配置String.xml裡的DownLoadUrl引數,這樣就可以進行測試了,該程式只在內網WLAN下測試完成,其他測試需要繼續進行;

  8.共同進步

  原始碼的下載地址為:http://pan.baidu.com/s/1tfHpW 我希望有需要的同學可以下載並完善這個Demo,我之後會把更新的這些資訊放在本博文的後面,希望各位大牛不吝惜自己的知識,共同學習;

程式碼中有不恰當地方希望各位同學熱情指出;

  9.小結&致謝

  在研究該功能時,參考的資料大多是Java的,轉換過程有點累人,個別資料都還是比較有參考價值的,感謝這些作者,特別感謝網友【綠豆莢】、【/aiq十三樓丶樓主】的不吝指教。

  10.BUG修改&細節完善 (期待各位同學的解答)