(廣西廣播電視技術(shù)中心)
在今天,隨著網(wǎng)絡(luò)技術(shù)的成熟和廣泛應(yīng)用,智能手機(jī)可實(shí)現(xiàn)信息的快速準(zhǔn)確輸入,并通過(guò)網(wǎng)絡(luò)與管理系統(tǒng)進(jìn)行數(shù)據(jù)交互,手機(jī)由單一的通信終端發(fā)展成為互聯(lián)網(wǎng)終端,越來(lái)越多的互聯(lián)網(wǎng)應(yīng)用被移植到智能手機(jī)中,使人類的生活更加信息智能化。一直以來(lái),原來(lái)的web網(wǎng)盤系統(tǒng)都只能通過(guò)電腦終端訪問(wèn),有明顯的約束性。本項(xiàng)目研發(fā)的基于Android的網(wǎng)盤移動(dòng)客戶端平臺(tái),就是通過(guò)Web Service接口實(shí)現(xiàn)與web系統(tǒng)的數(shù)據(jù)交互和同步,用戶能夠隨時(shí)隨地使用安卓手機(jī)登錄本客戶端對(duì)文件進(jìn)行上傳、下載、刪除、移動(dòng)、復(fù)制、在線閱讀等操作,實(shí)現(xiàn)了真正的掌上移動(dòng)辦公。
Java是一種跨平臺(tái)、面向?qū)ο蟮母呒?jí)語(yǔ)言,是現(xiàn)在最流行的網(wǎng)絡(luò)編程語(yǔ)言。具有平臺(tái)無(wú)關(guān)、分布式、安全性、多線程等特殊的優(yōu)點(diǎn)。它是純面向?qū)ο蟮恼Z(yǔ)言,支持對(duì)象和類的概念,支持類的單繼承。Java引入了“包”這個(gè)概念,通過(guò)包管理程序中的類。 用Java編寫的程序,可以運(yùn)行在任何平臺(tái)和設(shè)備上,真正實(shí)現(xiàn)“一次編寫,到處運(yùn)行”。
Web Service是為不同平臺(tái)、不同語(yǔ)言開(kāi)發(fā)的應(yīng)用之間的交互而設(shè)計(jì)的遠(yuǎn)程調(diào)用技術(shù),是一個(gè)平臺(tái)獨(dú)立的,低耦合的,自包含的、基于可編程的web的應(yīng)用程序,通過(guò)SOAP在Web上提供軟件服務(wù),使用WSDL文件進(jìn)行說(shuō)明,并通過(guò)UDDI進(jìn)行注冊(cè),采用XML格式封裝數(shù)據(jù),能夠?qū)崿F(xiàn)跨語(yǔ)言、跨網(wǎng)絡(luò),跨平臺(tái)的互操作性。依據(jù)Web Service規(guī)范實(shí)施的應(yīng)用之間,無(wú)論它們所使用的語(yǔ)言、平臺(tái)或內(nèi)部協(xié)議是什么,都可以相互交換數(shù)據(jù)。本項(xiàng)目研發(fā)的基于Android的網(wǎng)盤移動(dòng)客戶端平臺(tái)與web項(xiàng)目的數(shù)據(jù)交互就是通過(guò)Web Service接口實(shí)現(xiàn)的。
Android是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng),該系統(tǒng)有四大組件,一是活動(dòng)(Activity),它是所有Android應(yīng)用的門面,用于存放在應(yīng)用中所有看得到的東西。二是服務(wù)(Service),運(yùn)行在程序后臺(tái),并且可以和其他組件進(jìn)行交互。三是廣播接收器(Broadcast Receiver),負(fù)責(zé)廣播接收和發(fā)送。四是內(nèi)容提供器(Content Provider),為應(yīng)用程序之間提供共享數(shù)據(jù)功能。除了四大組件,還有豐富的系統(tǒng)控件、地理位置定位以及強(qiáng)大的多媒體功能等特色,Android是目前全球最受歡迎的智能手機(jī)平臺(tái)。
要實(shí)現(xiàn)用戶登錄、上傳、下載、刪除、移動(dòng)、復(fù)制、在線閱讀等功能,具體功能如下:
1.登錄:用于給用戶進(jìn)行登錄,用戶必須輸入正確的用戶名和密碼,才能夠進(jìn)行登錄,用戶可以選擇自動(dòng)登錄和記住密碼功能。
2.上傳:用于可以打開(kāi)目錄選擇文件進(jìn)行上傳,也可以在別的app里選擇文件分享到網(wǎng)盤app進(jìn)行上傳。
3.下載:用戶可以選擇文件進(jìn)行下載。
4.刪除:用戶可以對(duì)文件和文件夾進(jìn)行刪除
5.移動(dòng):用戶可以對(duì)文件進(jìn)行移動(dòng),即把文件從一個(gè)文件夾移動(dòng)到另一個(gè)文件夾。
6.復(fù)制:用戶可以對(duì)文件進(jìn)行復(fù)制,即把文件從一個(gè)文件夾復(fù)制到另一個(gè)文件夾。
7.在線閱讀:用戶可以在線打開(kāi)常用文件。
圖1 網(wǎng)盤app流程圖
用戶訪問(wèn)系統(tǒng)可以進(jìn)行登錄、上傳、下載、刪除、移動(dòng)、復(fù)制、在線閱讀等功能,系統(tǒng)的流程圖如圖1所示。
為了能夠更清晰地表現(xiàn)出整個(gè)過(guò)程,畫出事件跟蹤圖,如圖2所示。
Web Service接口通過(guò)IIS服務(wù)發(fā)布之后,客戶端通過(guò)httpsoap方式訪問(wèn),服務(wù)端按SOAP消息執(zhí)行相應(yīng)的Web服務(wù),并將數(shù)據(jù)以結(jié)構(gòu)化的JSON格式返回給客戶端, 客戶端通過(guò)GSON庫(kù)快速解析JSON數(shù)據(jù),最后把數(shù)據(jù)渲染到可視化界面。
RecyclerView是 增 強(qiáng) 版 的ListView,優(yōu)化了ListView中存在的各種不足之處,它比ListView更加強(qiáng)大、更加靈活、擴(kuò)展性更好,運(yùn)行效率更高。因此本客戶端選擇使用RecyclerView來(lái)顯示文件列表。由于數(shù)據(jù)無(wú)法直接傳遞給RecyclerView,所以需要借助適配器來(lái)完成,適配器的實(shí)現(xiàn)類RecyclerView.Adapter可以通過(guò)泛型來(lái)指定要適配的數(shù)據(jù)類型。可以通過(guò)調(diào)用setAdapter()方法將構(gòu)建好的適配器對(duì)象傳遞到RecyclerView。到此,RecyclerView和數(shù)據(jù)之間的關(guān)聯(lián)成功建立。
本客戶端通過(guò)集成TBS的SDK實(shí)現(xiàn)在線打開(kāi)常用文件的功能,具有速度快、兼容好、更安全、更穩(wěn)定等優(yōu)點(diǎn)。 客戶端首先本地判斷文件是否能夠打開(kāi),再調(diào)用Web Service接口請(qǐng)求服務(wù)器上的文件進(jìn)行緩存,最后加載瀏覽插件打開(kāi)文件。
發(fā)起網(wǎng)絡(luò)請(qǐng)求是一個(gè)耗時(shí)的操作,為了避免主線程被阻塞而影響用戶對(duì)軟件的正常使用,應(yīng)該將這類耗時(shí)操作放到子線程里運(yùn)行。AsyncTask是一個(gè)非常好用的工具類,它將異步消息處理機(jī)制完美封裝,更加方便地實(shí)現(xiàn)了在子線程中對(duì)UI進(jìn)行操作。由于AsyncTask是一個(gè)抽象類,因此必須要?jiǎng)?chuàng)建子類去繼承它才可以使用,同時(shí)還需要重寫里面的方法才能完成對(duì)任務(wù)的定制。通常需要重寫的方法有以下四個(gè):
1.nPreExecute() :此方法會(huì)在后臺(tái)任務(wù)執(zhí)行前被調(diào)用,用于進(jìn)行一些初始化工作。
2.doInBackground(Params… params) :此方法的所有代碼都在子線程中執(zhí)行,我們應(yīng)該在這里去處理所有的耗時(shí)任務(wù)。
3.onProgressUpdate(Progress…): 由publishProgress內(nèi)部調(diào)用,表示任務(wù)進(jìn)度更新。
4.onPostExecute(Result result):此方法會(huì)在后臺(tái)任務(wù)執(zhí)行完畢后被調(diào)用,參數(shù)即為后臺(tái)任務(wù)的返回結(jié)果,可以利用結(jié)果來(lái)更新UI。
上傳和下載都需要訪問(wèn)手機(jī)存儲(chǔ)權(quán)限。
圖2 網(wǎng)盤app事件跟蹤圖
上傳是采用分片上傳的方法,結(jié)合Web Service接口實(shí)現(xiàn)將文件上傳到web服務(wù)器的功能。上傳可分為本地上傳和分享上傳。本地上傳通過(guò)調(diào)用手機(jī)的文件管理器打開(kāi)本地目錄選擇文件上傳。分享上傳使用Intent.ACTION_SEND來(lái)實(shí)現(xiàn)接收分享功能,通過(guò)編寫接收分享的接口來(lái)實(shí)現(xiàn)文件的上傳,該功能可以在別的app里選擇文件,然后通過(guò)分享功能把文件分享到本客戶端進(jìn)行上傳。
下載是通過(guò)調(diào)用手機(jī)的下載管理器進(jìn)行文件下載,通過(guò)廣播監(jiān)聽(tīng)下載情況并發(fā)送廣播告知用戶是否完成下載。
SharedPreferences是Android平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來(lái)保存應(yīng)用的一些常用配置。它使用鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù),支持多種不同的數(shù)據(jù)類型存儲(chǔ)。本客戶端使用SharedPreferences來(lái)實(shí)現(xiàn)自動(dòng)登錄和記住密碼功能的功能,結(jié)合AES加密算法來(lái)存儲(chǔ)用戶名和密碼,保證了信息安全。
用戶登錄主要是對(duì)用戶輸入的用戶名密碼進(jìn)行驗(yàn)證,如果用戶選擇自動(dòng)登錄和記住密碼,下次打開(kāi)app時(shí)就直接跳過(guò)登錄頁(yè)面。
主界面是用戶登錄以后進(jìn)入的界面,用于展示文件列表,用戶可以在這個(gè)界面對(duì)文件進(jìn)行各種文件操作,比如上傳、下載、刪除等。用戶點(diǎn)擊文件夾可以進(jìn)入該文件夾,點(diǎn)擊上級(jí)文件或按返回鍵可以返回上級(jí)文件夾。
點(diǎn)擊復(fù)選框可以批量對(duì)文件進(jìn)行相應(yīng)的操作。點(diǎn)擊“全選”按鈕可以選擇所有文件,點(diǎn)擊“取消”則取消選擇所有文件。
只有文件被選中的時(shí)候頂部的操作菜單才會(huì)顯示,否則不顯示。用戶選中文件進(jìn)行復(fù)制或者移動(dòng)時(shí),可以選擇粘貼到那個(gè)文件夾,過(guò)程如圖3所示,圖3(1)是未選中文件時(shí)顯示的界面,圖3(2)是選中文件時(shí)顯示的界面,圖3(3)是移動(dòng)或復(fù)制文件時(shí)顯示的界面。
當(dāng)用戶想要切換賬號(hào)或者退出時(shí),可以左滑選擇注銷或者退出,注銷則返回到登錄頁(yè),退出則是退出該應(yīng)用。
本系統(tǒng)是一個(gè)將各種最熱門的IT技術(shù)進(jìn)行有機(jī)整合而實(shí)現(xiàn)的一個(gè)網(wǎng)盤手機(jī)客戶端,可以提供一種全新的在線使用網(wǎng)盤的體驗(yàn),大大提高了工作的靈活性。
圖3 文件移動(dòng)或復(fù)制的過(guò)程圖