(廣西廣播電視技術中心)
在今天,隨著網絡技術的成熟和廣泛應用,智能手機可實現信息的快速準確輸入,并通過網絡與管理系統進行數據交互,手機由單一的通信終端發展成為互聯網終端,越來越多的互聯網應用被移植到智能手機中,使人類的生活更加信息智能化。一直以來,原來的web網盤系統都只能通過電腦終端訪問,有明顯的約束性。本項目研發的基于Android的網盤移動客戶端平臺,就是通過Web Service接口實現與web系統的數據交互和同步,用戶能夠隨時隨地使用安卓手機登錄本客戶端對文件進行上傳、下載、刪除、移動、復制、在線閱讀等操作,實現了真正的掌上移動辦公。
Java是一種跨平臺、面向對象的高級語言,是現在最流行的網絡編程語言。具有平臺無關、分布式、安全性、多線程等特殊的優點。它是純面向對象的語言,支持對象和類的概念,支持類的單繼承。Java引入了“包”這個概念,通過包管理程序中的類。 用Java編寫的程序,可以運行在任何平臺和設備上,真正實現“一次編寫,到處運行”。
Web Service是為不同平臺、不同語言開發的應用之間的交互而設計的遠程調用技術,是一個平臺獨立的,低耦合的,自包含的、基于可編程的web的應用程序,通過SOAP在Web上提供軟件服務,使用WSDL文件進行說明,并通過UDDI進行注冊,采用XML格式封裝數據,能夠實現跨語言、跨網絡,跨平臺的互操作性。依據Web Service規范實施的應用之間,無論它們所使用的語言、平臺或內部協議是什么,都可以相互交換數據。本項目研發的基于Android的網盤移動客戶端平臺與web項目的數據交互就是通過Web Service接口實現的。
Android是一種基于Linux的自由及開放源代碼的操作系統,該系統有四大組件,一是活動(Activity),它是所有Android應用的門面,用于存放在應用中所有看得到的東西。二是服務(Service),運行在程序后臺,并且可以和其他組件進行交互。三是廣播接收器(Broadcast Receiver),負責廣播接收和發送。四是內容提供器(Content Provider),為應用程序之間提供共享數據功能。除了四大組件,還有豐富的系統控件、地理位置定位以及強大的多媒體功能等特色,Android是目前全球最受歡迎的智能手機平臺。
要實現用戶登錄、上傳、下載、刪除、移動、復制、在線閱讀等功能,具體功能如下:
1.登錄:用于給用戶進行登錄,用戶必須輸入正確的用戶名和密碼,才能夠進行登錄,用戶可以選擇自動登錄和記住密碼功能。
2.上傳:用于可以打開目錄選擇文件進行上傳,也可以在別的app里選擇文件分享到網盤app進行上傳。
3.下載:用戶可以選擇文件進行下載。
4.刪除:用戶可以對文件和文件夾進行刪除
5.移動:用戶可以對文件進行移動,即把文件從一個文件夾移動到另一個文件夾。
6.復制:用戶可以對文件進行復制,即把文件從一個文件夾復制到另一個文件夾。
7.在線閱讀:用戶可以在線打開常用文件。

圖1 網盤app流程圖
用戶訪問系統可以進行登錄、上傳、下載、刪除、移動、復制、在線閱讀等功能,系統的流程圖如圖1所示。
為了能夠更清晰地表現出整個過程,畫出事件跟蹤圖,如圖2所示。
Web Service接口通過IIS服務發布之后,客戶端通過httpsoap方式訪問,服務端按SOAP消息執行相應的Web服務,并將數據以結構化的JSON格式返回給客戶端, 客戶端通過GSON庫快速解析JSON數據,最后把數據渲染到可視化界面。
RecyclerView是 增 強 版 的ListView,優化了ListView中存在的各種不足之處,它比ListView更加強大、更加靈活、擴展性更好,運行效率更高。因此本客戶端選擇使用RecyclerView來顯示文件列表。由于數據無法直接傳遞給RecyclerView,所以需要借助適配器來完成,適配器的實現類RecyclerView.Adapter可以通過泛型來指定要適配的數據類型。可以通過調用setAdapter()方法將構建好的適配器對象傳遞到RecyclerView。到此,RecyclerView和數據之間的關聯成功建立。
本客戶端通過集成TBS的SDK實現在線打開常用文件的功能,具有速度快、兼容好、更安全、更穩定等優點。 客戶端首先本地判斷文件是否能夠打開,再調用Web Service接口請求服務器上的文件進行緩存,最后加載瀏覽插件打開文件。
發起網絡請求是一個耗時的操作,為了避免主線程被阻塞而影響用戶對軟件的正常使用,應該將這類耗時操作放到子線程里運行。AsyncTask是一個非常好用的工具類,它將異步消息處理機制完美封裝,更加方便地實現了在子線程中對UI進行操作。由于AsyncTask是一個抽象類,因此必須要創建子類去繼承它才可以使用,同時還需要重寫里面的方法才能完成對任務的定制。通常需要重寫的方法有以下四個:
1.nPreExecute() :此方法會在后臺任務執行前被調用,用于進行一些初始化工作。
2.doInBackground(Params… params) :此方法的所有代碼都在子線程中執行,我們應該在這里去處理所有的耗時任務。
3.onProgressUpdate(Progress…): 由publishProgress內部調用,表示任務進度更新。
4.onPostExecute(Result result):此方法會在后臺任務執行完畢后被調用,參數即為后臺任務的返回結果,可以利用結果來更新UI。
上傳和下載都需要訪問手機存儲權限。

圖2 網盤app事件跟蹤圖
上傳是采用分片上傳的方法,結合Web Service接口實現將文件上傳到web服務器的功能。上傳可分為本地上傳和分享上傳。本地上傳通過調用手機的文件管理器打開本地目錄選擇文件上傳。分享上傳使用Intent.ACTION_SEND來實現接收分享功能,通過編寫接收分享的接口來實現文件的上傳,該功能可以在別的app里選擇文件,然后通過分享功能把文件分享到本客戶端進行上傳。
下載是通過調用手機的下載管理器進行文件下載,通過廣播監聽下載情況并發送廣播告知用戶是否完成下載。
SharedPreferences是Android平臺上一個輕量級的存儲類,用來保存應用的一些常用配置。它使用鍵值對的方式存儲數據,支持多種不同的數據類型存儲。本客戶端使用SharedPreferences來實現自動登錄和記住密碼功能的功能,結合AES加密算法來存儲用戶名和密碼,保證了信息安全。
用戶登錄主要是對用戶輸入的用戶名密碼進行驗證,如果用戶選擇自動登錄和記住密碼,下次打開app時就直接跳過登錄頁面。
主界面是用戶登錄以后進入的界面,用于展示文件列表,用戶可以在這個界面對文件進行各種文件操作,比如上傳、下載、刪除等。用戶點擊文件夾可以進入該文件夾,點擊上級文件或按返回鍵可以返回上級文件夾。
點擊復選框可以批量對文件進行相應的操作。點擊“全選”按鈕可以選擇所有文件,點擊“取消”則取消選擇所有文件。
只有文件被選中的時候頂部的操作菜單才會顯示,否則不顯示。用戶選中文件進行復制或者移動時,可以選擇粘貼到那個文件夾,過程如圖3所示,圖3(1)是未選中文件時顯示的界面,圖3(2)是選中文件時顯示的界面,圖3(3)是移動或復制文件時顯示的界面。
當用戶想要切換賬號或者退出時,可以左滑選擇注銷或者退出,注銷則返回到登錄頁,退出則是退出該應用。
本系統是一個將各種最熱門的IT技術進行有機整合而實現的一個網盤手機客戶端,可以提供一種全新的在線使用網盤的體驗,大大提高了工作的靈活性。

圖3 文件移動或復制的過程圖