彭 飛
(安徽信息工程學(xué)院 計(jì)算機(jī)與軟件工程學(xué)院,安徽 蕪湖 241000)
目前,市場(chǎng)上關(guān)于移動(dòng)學(xué)習(xí)的安卓程序較多,除了可以播放學(xué)習(xí)視頻之外,絕大部分應(yīng)用程序是將學(xué)習(xí)內(nèi)容以網(wǎng)頁(yè)化的形式在客戶(hù)端進(jìn)行展示,但目前高校教師團(tuán)隊(duì)的課件基本都是PPT/DOC/PDF格式,在經(jīng)過(guò)轉(zhuǎn)換之后,很難保證在客戶(hù)端瀏覽的格式與電腦端保持一致,那么自然會(huì)降低學(xué)習(xí)效果和效率.因此,若能設(shè)計(jì)并研發(fā)出一款在安卓客戶(hù)端直接對(duì)PPT/DOC/PDF格式的課件進(jìn)行在線閱讀的移動(dòng)學(xué)習(xí)應(yīng)用程序,其對(duì)促進(jìn)教育的發(fā)展,所帶來(lái)的社會(huì)效益都將是非??捎^的[1].
安卓是一個(gè)以Linux系統(tǒng)內(nèi)核為基礎(chǔ),開(kāi)放源代碼,具有高度可擴(kuò)展性的智能手機(jī)操作系統(tǒng),是目前市場(chǎng)上使用率較高的手機(jī)操作系統(tǒng)之一[2].
正是由于安卓系統(tǒng)是開(kāi)放式的,在不支付任何費(fèi)用的情況都可直接使用,因此在目前國(guó)內(nèi),手機(jī)生產(chǎn)廠商基于企業(yè)利潤(rùn)或研發(fā)成本的考慮,都會(huì)選擇安卓系統(tǒng)作為其生產(chǎn)的手機(jī)操作系統(tǒng)[20].
PDF課件閱讀客戶(hù)端之所以選擇安卓系統(tǒng)作為平臺(tái)的重要原因就是由于安卓具有以下優(yōu)勢(shì):
因?yàn)榘沧康拈_(kāi)放性,智能移動(dòng)終端的生產(chǎn)廠商很大一部分都已經(jīng)成為安卓聯(lián)盟中的一員,導(dǎo)致其擁有大量的開(kāi)發(fā)者,系統(tǒng)用戶(hù)和應(yīng)用程序也日益增多,最終也就促使了安卓系統(tǒng)以極快的速度走向成熟.
安卓操作系統(tǒng)目前支持所有的網(wǎng)絡(luò)制式,包括CDMA、EV-DO、TD-SCDMA、GSM/EDGE、UMTS、Bluetooth、Wi-Fi、LTE、NFC和WiMAX.因此用戶(hù)可以不受網(wǎng)絡(luò)運(yùn)營(yíng)商的限制而連接入網(wǎng)絡(luò),能夠更簡(jiǎn)單地進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的使用.
由于安卓的開(kāi)發(fā)性,大量的設(shè)備制造廠商的加入,因而就會(huì)推出屏幕尺寸各異、各具功能特色、性能差異巨大,但又不缺失人性化的產(chǎn)品[3].
目前企業(yè)中的安卓程序的研發(fā)人員大多數(shù)都在基于Eclipse平臺(tái)進(jìn)行代碼編寫(xiě)和調(diào)試工作.Eclipse平臺(tái)是一個(gè)開(kāi)源的軟件項(xiàng)目,由于它是一套軟件框架和服務(wù),所以就能夠通過(guò)添加不同的插件來(lái)達(dá)到開(kāi)發(fā)不同應(yīng)用程序的目的.目前這個(gè)平臺(tái)有眾多版本,其中就包括谷歌公司專(zhuān)門(mén)針對(duì)開(kāi)發(fā)安卓應(yīng)用程序所開(kāi)發(fā)的一一個(gè)版本,被稱(chēng)之為ADT-Bundle.ADT-Bundle本質(zhì)上就是以Eclipse平臺(tái)為基礎(chǔ),添加了ADT插件以及最新版本的安卓的SDK.研發(fā)人員就可以利用該平臺(tái)直接新建安卓工程,編寫(xiě)調(diào)試代碼,打包并發(fā)布安卓應(yīng)用程序,創(chuàng)建安卓模擬器,在模擬器上安裝并測(cè)試安卓應(yīng)用程序,這樣對(duì)于安卓應(yīng)用程序的研發(fā)就可以更加集中精力,提高開(kāi)發(fā)效率.
本移動(dòng)客戶(hù)端的的系統(tǒng)拓?fù)浣Y(jié)構(gòu)如圖1所示.
圖1 系統(tǒng)拓?fù)鋱D
HttpClient作為一個(gè)開(kāi)源的、易于網(wǎng)絡(luò)請(qǐng)求的HTTP客戶(hù)端,由于其既可以發(fā)送請(qǐng)求,又可以接收響應(yīng),因此目前安卓項(xiàng)目已經(jīng)集成了HttpClient用于請(qǐng)求發(fā)送和響應(yīng)接受.安卓應(yīng)用程序的開(kāi)發(fā)人員能夠直接利用HttpClient進(jìn)行網(wǎng)絡(luò)操作,來(lái)達(dá)到與Web服務(wù)器進(jìn)行數(shù)據(jù)交互的目的.
在安卓程序中利用HttpClient進(jìn)行網(wǎng)絡(luò)操作,包括發(fā)送請(qǐng)求和接收響應(yīng),大致包括以下幾個(gè)操作:
實(shí)例化HttpClient表示客戶(hù)端.
實(shí)例化請(qǐng)求對(duì)象,根據(jù)請(qǐng)求方式分為兩種情況:假如是GET,則實(shí)例化HttpGet類(lèi);假如是POST,則實(shí)例化HttpPost類(lèi).
執(zhí)行客戶(hù)端實(shí)例的execute方法用于進(jìn)行請(qǐng)求,該方法的返回值為服務(wù)器響應(yīng)對(duì)象,通過(guò)調(diào)用該對(duì)象的方法則可以獲取服務(wù)器響應(yīng)的各項(xiàng)數(shù)據(jù).
根據(jù)響應(yīng)對(duì)象的屬性判斷是否正常.
如果響應(yīng)正常,則獲得響應(yīng)對(duì)象當(dāng)中的數(shù)據(jù).
不同于市場(chǎng)上大部分移動(dòng)學(xué)習(xí)客戶(hù)端都是以文本或網(wǎng)頁(yè)直接在界面中呈現(xiàn),為保證在本客戶(hù)端中對(duì)課件的瀏覽內(nèi)容和格式與在電腦端中保持一致,課件閱讀模塊是基于開(kāi)源項(xiàng)目MuPDF案例的基礎(chǔ)上,從服務(wù)器端獲取課件文檔數(shù)據(jù)后,然后直接瀏覽PDF格式的文件,同時(shí)具有翻頁(yè),放大縮小文檔的功能.
課件閱讀的時(shí)序圖如圖2所示.
圖2 課件閱讀時(shí)序圖
本客戶(hù)端以Eclipse作為開(kāi)發(fā)環(huán)境,使用Java進(jìn)行研發(fā),采用SQLite進(jìn)行客戶(hù)端數(shù)據(jù)的存儲(chǔ)[4].下載由谷歌公司推出的專(zhuān)門(mén)開(kāi)發(fā)安卓應(yīng)用程序的集成軟件包:ADT Bundle.
本客戶(hù)端通過(guò)調(diào)用符合REST格式的WebService接口來(lái)完成與學(xué)習(xí)資源平臺(tái)業(yè)務(wù)數(shù)據(jù)的交互,此時(shí)就需要一個(gè)公共的網(wǎng)絡(luò)訪問(wèn)組件,那么我們把公共訪問(wèn)組件封裝到HttpUtil類(lèi)中,這個(gè)類(lèi)是利用安卓系統(tǒng)SDK原生態(tài)的網(wǎng)絡(luò)組件HttpClient搭建,可以通過(guò)網(wǎng)絡(luò)地址以Get或者Post的方式向服務(wù)器請(qǐng)求并傳遞數(shù)據(jù),然后獲取服務(wù)器響應(yīng)的數(shù)據(jù).利用HttpClient進(jìn)行網(wǎng)絡(luò)訪問(wèn)有下面幾步:
(1)實(shí)例化HttpClient對(duì)象,代碼如下:
HttpClient httpClient=new DefaultHttpClient();
(2)根據(jù)請(qǐng)求方式,實(shí)例化httpGET或httpPost對(duì)象,這些對(duì)象的創(chuàng)建都要傳入即將訪問(wèn)的網(wǎng)絡(luò)地址,代碼如下:
HttpPost post=new HttpPost(url);
(3)如果有數(shù)據(jù)需要傳遞給服務(wù)器,則將數(shù)據(jù)進(jìn)行封裝處理,代碼如下:
(6)解析得到的響應(yīng)數(shù)據(jù)內(nèi)容.
(7)關(guān)閉http連接,釋放對(duì)象資源,代碼如下:
httpClient.getConnectionManager().shutdown();
MuPDF是目前在安卓設(shè)備上進(jìn)行PDF瀏覽領(lǐng)域,集成應(yīng)用最多的開(kāi)源項(xiàng)目之一,其具有小而快速的特點(diǎn).而且功能齊全,支持對(duì)PDF文件進(jìn)行批注、搜索等一系列功能.
本客戶(hù)端在實(shí)現(xiàn)課件閱讀功能時(shí),集成了基于MuPDF的開(kāi)源項(xiàng)目,并對(duì)界面做了實(shí)用性修改,刪除部分自帶的冗余功能.具體實(shí)現(xiàn)如下:
(a)下載基于MuPDF的開(kāi)源項(xiàng)目artifex.mupdf
(b)在本客戶(hù)端項(xiàng)目src目錄下創(chuàng)建包名com.artifex.mupdf,然后將開(kāi)源項(xiàng)目中代碼拷貝到該包下.注意:此處新建的包名不可做任何變動(dòng).
(c)將開(kāi)源項(xiàng)目中的libmupdf.so文件復(fù)制到安卓工程中的指定的文件夾內(nèi),如圖3所示:
圖3 libmupdf.so文件位置
(d)在項(xiàng)目中的清單文件AndroidManifest.xml中,進(jìn)行Activity的聲明注冊(cè),代碼如下:
(e)在客戶(hù)端中進(jìn)行課件閱讀時(shí),將非加密狀態(tài)下的課件文檔路徑存入到Intent對(duì)象中,然后跳轉(zhuǎn)到步驟4聲明的MuPDFActivity,即可顯示該課件進(jìn)行閱讀.代碼如下:
課件閱讀是基于開(kāi)源項(xiàng)目MuPDF的項(xiàng)目案例,其具有小而快速瀏覽pdf文件的特性.由于MuPDF項(xiàng)目只能支持文件瀏覽,而不支持二進(jìn)制數(shù)據(jù),所以當(dāng)從學(xué)習(xí)資源平臺(tái)獲取加密的文檔數(shù)據(jù)之后,首先會(huì)在客戶(hù)端本地生成臨時(shí)文件,然后將臨時(shí)文件的路徑通過(guò)Intent對(duì)象傳遞給項(xiàng)目中瀏覽界面,進(jìn)行文檔的閱讀.由于臨時(shí)文件是不加密的,就存放于本地,為了課件的安全性,需要在瀏覽界面中重寫(xiě)onDestroy函數(shù)及時(shí)刪除臨時(shí)文件.
(a)將PDF文件瀏覽界面的Activity在清單文件AndroidManifest.xml進(jìn)行注冊(cè).
(b)從服務(wù)端獲取要瀏覽的課件數(shù)據(jù),并在客戶(hù)端本地通過(guò)IO讀寫(xiě)生成文件,注意此時(shí)文件處于加密狀態(tài).
(c)將文件路徑存入到Intent對(duì)象,并通過(guò)該對(duì)象跳轉(zhuǎn)到文件瀏覽界面MuPDFActivity,代碼如下:
(d)在MuPDFActivity類(lèi)中的onCreate方法內(nèi),通過(guò)Intent對(duì)象完成文件路徑的數(shù)據(jù)傳值,利用DES解密算法對(duì)文件進(jìn)行解密操作,生成可直接瀏覽的文件,同時(shí)根據(jù)文件路徑刪除加密文件.
(e)進(jìn)行的課件的瀏覽,實(shí)現(xiàn)大小變化、上頁(yè)下頁(yè)等.
(f)在MuPDFActivity類(lèi)中的onDestroy方法內(nèi),負(fù)責(zé)及時(shí)刪除可直接瀏覽、不加密的課件,代碼如下:
Android客戶(hù)端實(shí)現(xiàn)了一個(gè)學(xué)習(xí)者可以利用服務(wù)器端中現(xiàn)有的課件等資源,在業(yè)余、閑散、碎片化的時(shí)間能夠進(jìn)行學(xué)習(xí),及時(shí)地解決了當(dāng)前大部分學(xué)習(xí)客戶(hù)端軟件不能直接瀏覽課件(PPT/DOC/PDF)的弊端.為保證服務(wù)器端中的現(xiàn)有課件在本客戶(hù)端閱讀時(shí)與電腦端的內(nèi)容格式的一致,集成并應(yīng)用開(kāi)源項(xiàng)目MuPDF實(shí)現(xiàn)對(duì)PDF文件的在線瀏覽.
赤峰學(xué)院學(xué)報(bào)·自然科學(xué)版2018年10期