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