葉為正,黃穎杰,李晶
(中山大學(xué)新華學(xué)院管理學(xué)院,東莞 523133)
Android SDK;高校學(xué)習(xí);云平臺
隨著以智能手機(jī)和平板電腦為代表的移動設(shè)備迅速普及,移動教育已經(jīng)成為當(dāng)今教育領(lǐng)域發(fā)展的新趨勢,而大學(xué)教育更強(qiáng)調(diào)的是課堂學(xué)習(xí)向課外學(xué)習(xí)的延伸,移動學(xué)習(xí)App恰好符合大學(xué)教育的這一特性,彌補(bǔ)了傳統(tǒng)課堂教學(xué)的不足,進(jìn)一步整合網(wǎng)絡(luò)學(xué)習(xí)資源,開發(fā)一款基于Android平臺的高校學(xué)習(xí)App,具有專業(yè)課輔導(dǎo)視頻觀看與下載、課程文檔資料預(yù)覽下載以及直播功能,讓大學(xué)生能夠更加深入地學(xué)習(xí)專業(yè)知識[1-4]。移動教育App在各個教育領(lǐng)域有著廣泛的應(yīng)用與發(fā)展前景,因此筆者認(rèn)為,采用各種云服務(wù)和SDK組合開發(fā),能夠針對不同教育領(lǐng)域與教師需求,快速開發(fā)出簡單易用、運(yùn)行穩(wěn)定的移動App。
百度云音視頻直播LSS(Live Streaming Service)是一個直播PaaS服務(wù)平臺,LSS提供直播“采集端-服務(wù)端-播放端”全套定制開發(fā)能力,采集端從直播源獲取直播推流送到LSS服務(wù)端,LSS服務(wù)端完成直播流的處理,播放端進(jìn)行播放。
百度VOD(Video On Demand)是百度云提供的面向音視頻點(diǎn)播的PaaS服務(wù)平臺,為開發(fā)者提供音視頻文件的存儲、管理及播放服務(wù)。
百度云文檔服務(wù)DOC(Document Service)是百度云提供的面向文檔處理的PaaS服務(wù)平臺,為開發(fā)者提供Office、WPS等多種格式的文檔存儲、管理及在線瀏覽服務(wù)。
Bmob后端云是全方位一體化的后端服務(wù)平臺,無需再造應(yīng)用后端服務(wù),輕松擁有開發(fā)中需要的各種后端能力。它提供可視化的云端數(shù)據(jù)表設(shè)計界面,輕松建庫建表。支持10種不同數(shù)據(jù)類型存儲,例如字符串、整型、數(shù)組等[5]。
本平臺采用C/S模式,前端也就是客戶端采用An?droid應(yīng)用程序的方式,后端采用Bmob云數(shù)據(jù)庫。前端通過Bmob云數(shù)據(jù)庫提供的API接口進(jìn)行數(shù)據(jù)交互,使用Struts2+REST API+JSP搭建后臺管理系統(tǒng),管理員可以直接通過后臺管理系統(tǒng)對Bmob云數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的管理。
客戶端采用Android平臺,包括登錄注冊、在線直播、輔導(dǎo)視頻以及文檔資料等模塊??蛻舳伺c服務(wù)器采用HTTP協(xié)議通信,數(shù)據(jù)通信的格式是JSON格式。前后端通過調(diào)用Bmob SDK相關(guān)訪問接口以及回調(diào)接口即可實(shí)現(xiàn)數(shù)據(jù)的交互,進(jìn)而完全消除開發(fā)者編寫服務(wù)器代碼以及維護(hù)服務(wù)器的操作。平臺系統(tǒng)結(jié)構(gòu)設(shè)計如圖1所示。
圖1 高校學(xué)習(xí)平臺系統(tǒng)結(jié)構(gòu)圖
Android客戶端模塊設(shè)計:用戶通過登錄或者注冊進(jìn)入到App時,首先會進(jìn)入到首頁,首頁主要有兩個功能:一個是推薦課程輪播圖片,另外一個是官方公告。通過底部導(dǎo)航用戶可以進(jìn)入到課程頁面,該頁面主要包含三個模塊:在線直播、輔導(dǎo)視頻學(xué)習(xí)和文檔資料。其中視頻課程和文檔資料可以下載到本地,在手機(jī)不聯(lián)網(wǎng)的情況下也可以隨時隨地進(jìn)行學(xué)習(xí),本地學(xué)習(xí)與在線學(xué)習(xí)相結(jié)合更加體現(xiàn)了移動學(xué)習(xí)隨時隨地的特性。
圖2 平臺功能模塊設(shè)計
在設(shè)計該在線學(xué)習(xí)系統(tǒng)時,需要考慮到對于不同數(shù)據(jù)采用不同的存儲方案。如在存儲登錄的用戶名和密碼時采用SharedPreferences,主要用于保存應(yīng)用的一些常用配置,雖然整體效率來看不是特別的高,對于常規(guī)的輕量級而言比SQLite要好不少。本項(xiàng)目主要的數(shù)據(jù)存儲在Bmob云數(shù)據(jù)庫上,具有低成本,除去復(fù)雜的后端開發(fā)。數(shù)據(jù)庫表有MyUser用戶信息表、Video錄播信息表、ZhiBo直播信息表、Doc文檔信息表、Chat直播互動表、Banner首頁圖片輪播信息表等,由于每個業(yè)務(wù)之類均沒有聯(lián)系,故每個表都是單表。
高校學(xué)習(xí)平臺開發(fā)主要包含兩個部分:Android客戶端和Java Web后臺服務(wù)端??蛻舳送ㄟ^Bmob提供的API接口進(jìn)行客戶端與后端云的數(shù)據(jù)交互,服務(wù)端通過Bmob提供的REST API對后端云數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行管理[10]。
用戶在使用該平臺時,需要輸入用戶名和密碼,若是第一次使用該平臺,則需要進(jìn)行注冊。App通過調(diào)用BmobUser類的signUp和login方法,將用戶輸入的數(shù)據(jù)封裝好并傳輸?shù)紹mob后端云,通過回調(diào)函數(shù)判斷注冊、登錄的成功與否。記住密碼通過SharedPrefer?ences輕量級儲存類實(shí)現(xiàn),根據(jù)Context獲取Shared?Preferences對象,利用 edit()方法獲取 Editor對象,通過Editor對象存儲key-value鍵值對數(shù)據(jù),最后通過commit()方法提交數(shù)據(jù)。當(dāng)用戶忘記密碼后,可以在忘記密碼模塊填入注冊時所填寫的郵箱,系統(tǒng)便會將重置密碼的鏈接發(fā)送到用戶郵箱。
本模塊分為兩部分:推流端與播放端,其中拉流端使用LSS推流SDK實(shí)現(xiàn)發(fā)起直播[6](如圖3所示),采用RTMP協(xié)議將直播視頻推流到百度LSS媒體中心進(jìn)行處理。播放端同時適用于直播與輔導(dǎo)視頻的觀看與互動(如圖4所示),采用RTMP/RTSP/HLS等協(xié)議進(jìn)行拉流[7],用戶登錄到直播與視頻系統(tǒng)后可以在直播頁面選擇其喜歡的直播間與視頻進(jìn)行學(xué)習(xí),同時,輔導(dǎo)視頻支持下載離線緩存(如圖5所示)。在線互動功能通過創(chuàng)建BmobRealTimeData對象,然后調(diào)用start方法連接服務(wù)器,該方法中的ValueEventListener參數(shù)用于監(jiān)聽連接成功和數(shù)據(jù)變化的回調(diào),當(dāng)有數(shù)據(jù)變化時會通過onDataChange回調(diào)方法反饋到客戶端,從而模擬實(shí)現(xiàn)在線實(shí)時互動功能。
圖3 推流界面 圖4在線播放與互動界面 圖5視頻緩存界面
本模塊借助百度云DOC面向文檔處理的PaaS服務(wù)平臺,為用戶提供文檔的預(yù)覽和下載功能,學(xué)生通過閱讀文檔資料,鞏固所學(xué)知識。用戶通過底部導(dǎo)航進(jìn)入到課程,切換到文檔列表頁面,可以選擇其需要的文檔進(jìn)行學(xué)習(xí)(如圖6所示)。文檔列表主要通過query.findObjects()向Bmob云數(shù)據(jù)庫發(fā)起請求,通過該回調(diào)方法完成數(shù)據(jù)的交互,當(dāng)用戶點(diǎn)擊某個文檔,通過In?tent傳遞文檔的URL到WebViewActivity,進(jìn)入該文檔預(yù)覽與下載頁面,當(dāng)用戶點(diǎn)擊下載文檔時,項(xiàng)目中的下載方法通過繼承AsyncTask實(shí)現(xiàn)下載。由于下載操作是耗時任務(wù),所以將耗時操作寫在doInBackground(Params...)方法中,確保在該方法中的所有代碼都會在子線程中運(yùn)行,任務(wù)一旦完成就可以通過return語句來將任務(wù)的執(zhí)行結(jié)果進(jìn)行返回(如圖7所示)。文檔緩存將通過 Environment.getExternalStorageDirectory().ge?tAbsolutePath()方法獲得緩存路徑,將緩存路徑傳入file,并創(chuàng)建 File file=new File(path);通過調(diào)用 File[]files=file.listFiles();實(shí)現(xiàn)本地緩存文件的查看與管理(如圖8所示)。
后臺服務(wù)端主要用于對Bmob云數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行管理。根據(jù)相關(guān)功能,后臺服務(wù)端主要分為系統(tǒng)管理和審核管理兩大模塊。系統(tǒng)管理模塊用于發(fā)布官方公告、增加直播頻道、輔導(dǎo)視頻以及資料文檔。審核管理用于審核用戶提交的輔導(dǎo)視頻與資料文檔,當(dāng)管理員在后臺同意審核請求,即可實(shí)現(xiàn)用戶分享的輔導(dǎo)視頻和文檔資料的發(fā)布。
圖6 文檔列表界面 圖7文檔預(yù)覽界面 圖8文檔緩存界面
通過Struts2+Bmob REST API+JSP架構(gòu)實(shí)現(xiàn)服務(wù)端的功能[9],假設(shè)功能是:刪除官方公告,當(dāng)管理員點(diǎn)擊刪除操作時,首先請求首先被核心控制器(StrutsPre?pare AndExecuteFilter)攔截,核心控制器讀取Struts.xml配置文件[8],根據(jù)用戶發(fā)送的刪除請求,找到處理刪除業(yè)務(wù)的Action,在刪除方法中,首先執(zhí)行Bmob.initBmob(appid,restkey)方法完成管理員的權(quán)限的驗(yàn)證,實(shí)現(xiàn)了modelDriven接口的Action,可以在Action中直接獲得例如HomeEntity對象,它會將ObjectgetModel()取得的HomeEntity放到 ValueStack中,通過 model.getId()獲得相應(yīng)的objectId參數(shù),并將其填入Bmob.delete("Ho?meEntity",objectId)方法即可實(shí)現(xiàn)數(shù)據(jù)的刪除,實(shí)現(xiàn)代碼如下。其他功能的實(shí)現(xiàn),只需要編寫相應(yīng)的REST API業(yè)務(wù)代碼即可實(shí)現(xiàn)。
public String delete(){
initBmob();//初始化 Bmob
String objectId=null;
BSONObject where1=new BSONObject(Where.less(10));
BSONObject where=new BSONObject();
where.put("id",model.getId());
String result=Bmob.find("HomeEntity",where.toString(),0,50,"order");//獲得該實(shí)體列表
JsonParser parser=new JsonParser();
JsonObject object=(JsonObject)parser.parse(result);
JsonArray jsonArray=object.getAsJsonArray("results");
for(int i=0;i< jsonArray.size();i++){
JsonObject subObject=jsonArray.get(i).getAsJson Object();
objectId=subObject.get("objectId").getAsStr-ing();
}
Bmob.delete("HomeEntity",objectId);//進(jìn)行刪除操作
return"toList";
}
該平臺開發(fā)完成后,在小米5S手機(jī)(四核,高通驍龍 821,內(nèi)存 3GB,5.15 英寸屏幕,Android OS v7.0)對各項(xiàng)功能進(jìn)行了測試,客戶端運(yùn)行良好,可以實(shí)現(xiàn)正常登錄、注冊,直播、輔導(dǎo)視頻的播放以及直播推流等功能,能夠達(dá)到在線學(xué)習(xí)的功能[11]。后臺服務(wù)端可以實(shí)現(xiàn)對Bmob云數(shù)據(jù)庫的管理,能夠?qū)?shù)據(jù)進(jìn)行增刪改查的操作。
在本項(xiàng)目研究中,采用了MyEclipse和Android Studio開發(fā)了基于Android高校在線學(xué)習(xí)App,使用百度云SDK與Bomob后端云數(shù)據(jù)庫,快速搭建了一個具有完整前后端的在線學(xué)習(xí)App,通過應(yīng)用手機(jī)直播、視頻輔導(dǎo)、分享文檔資料等方式實(shí)現(xiàn)對課程教學(xué)模式的創(chuàng)新,充分利用該軟件,有利于提高學(xué)生學(xué)習(xí)積極性,調(diào)動課堂與課下學(xué)習(xí)氛圍,在學(xué)校課堂的實(shí)踐中能夠滿足日常的直播教學(xué)需求,充分提升了互聯(lián)網(wǎng)與教學(xué)的協(xié)同創(chuàng)新運(yùn)用。