既然已經確定 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...

    縹緲 發表在 痞客邦 留言(8) 人氣()