既然已經確定 Server 端有比較新的版本了,那麼該如下載呢?筆者直覺想到的方法有幾種,比如透過 HTTP、FTP 等,不過且慢,真的要實做的時候,才會發現如果要透過 HTTP,那麼不是得在 App 專案上置放 Indy 元件才有辦法?那麼已經有點大的 apk 又要增胖了...不好不好,那改用 FTP 的話呢?更慘,不但 Indy 元件跑不掉,而且 Server 端還得多開 Port 21 與實做 FTP Server 的功能...還有沒有其他方法呢?
其實是有的!仔細想想你現在不是在用 DataSnap Server & Clinet 嗎?難道不能用現成的 DataSnap 機制來傳輸檔案嗎?答案是可以的,實做也並不困難,在 Server 端實做一個 function,回傳值為 TStream,Client 端負責把 TStream 接下來然後轉存為檔案即可,Port 也不用多開,真是一舉數得…不過話說回來,用「講」的比較快啦,實做起來的難度,跟之前其他篇比較來,還是稍微硬一點點。接下來就讓我們開始吧...
首先要新增一個 DataSnap Server 與 DataSnap Client 的專案,如果不知道怎麼新增,請參閱之前快快樂樂系列的文章
快快樂樂學習 delphi XE5 for Android app(三)(a)建立 DataSnap Server
快快樂樂學習 delphi XE5 for Android app(三)(b)在 App 顯示後端資料庫的資料 with DataSnap Client
ok,假設您已經知道如何新增了,Server 端的專案取名為 UpgServer,Client 的名稱自然就是 UpgClient,接下來在 Server 端的部分新增一個名為 GetUpdateFile 的 function 如下
這樣寫的意思,就是你需要更新用的 Upgclient.apk 檔案,必須跟 UpgServer.exe 放在同一目錄,如下
Server 端好了之後,接下來就是 Client,首先放一個 Button 在主 Form 上,然後 Button.Click 的部分如下
程式碼的部分,主要是先透過 Java Class 取得一個可以暫存檔案的位置,然後用這個檔案名稱建立 TFileStream,再把 Server 端傳遞過來的 TStream 寫進去...大功告成!
執行成功的話,你可以得到如下畫面
當然上述程式碼只有撰寫出主要的部分,你也可以再依實際需要自行強化,比如下載進度表達、錯誤機制防範等等
to be continued...