賈慶瑞++宋麗紅++董靜
摘要:基于GPS和iBeacon實(shí)現(xiàn)智能校園信息發(fā)布平臺(tái)。學(xué)生持手機(jī)進(jìn)入校園后,服務(wù)器會(huì)實(shí)時(shí)獲取學(xué)生的位置信息,向?qū)W生推送校園內(nèi)各區(qū)域信息。新生入學(xué),服務(wù)器發(fā)送報(bào)到流程中各位置的信息,新生到達(dá)指定位置時(shí),推送幫助消息,提高了報(bào)到效率,節(jié)省了大量人力和時(shí)間。
關(guān)鍵詞:iBeacon;Android系統(tǒng);PHP;位置服務(wù)
DOIDOI:10.11907/rjdk.161562
中圖分類號:TP319
文獻(xiàn)標(biāo)識碼:A文章編號文
章編號:16727800(2016)009006903
基金項(xiàng)目基金項(xiàng)目:2015年地方高校國家級大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(201510070005)
作者簡介作者簡介:宋麗紅(1975-),女,天津人,博士,天津財(cái)經(jīng)大學(xué)理工學(xué)院副教授,研究方向?yàn)檐浖こ?、智能信息系統(tǒng);董靜(1975-),女,天津人,博士,天津財(cái)經(jīng)大學(xué)理工學(xué)院講師,研究方向?yàn)檐浖こ獭?/p>
0引言
很多高校發(fā)布信息時(shí)大多還是公告板、電話或者群發(fā),學(xué)生由于不能及時(shí)獲取信息而錯(cuò)過活動(dòng)。信息收發(fā)途徑是否便捷、及時(shí),以及受眾面的大小直接決定了信息的廣泛性和時(shí)效性。新生報(bào)到時(shí),大多數(shù)學(xué)校還是由學(xué)生和教師組成志愿者隊(duì)伍進(jìn)行引導(dǎo)和服務(wù),付出很大的精力和時(shí)間但效率不高,研究適合校園的高效可靠低成本智能信息發(fā)布平臺(tái)迫在眉睫。
“你在哪里?你身邊有什么資源?”由美國學(xué)者Schilit在1994年首次提出,即基于位置服務(wù)LBS(Location Based Services)。本文根據(jù)學(xué)生位置推送與該位置相關(guān)的信息,學(xué)生也可以主動(dòng)獲取信息,設(shè)計(jì)并實(shí)現(xiàn)了基于GPS和iBeacon的校園信息發(fā)布系統(tǒng),
1系統(tǒng)設(shè)計(jì)
1.1系統(tǒng)功能設(shè)計(jì)
本系統(tǒng)基于學(xué)生位置,推送各類信息,如學(xué)術(shù)活動(dòng)、社團(tuán)活動(dòng)、圖書館新書信息、食堂優(yōu)惠信息等;新生進(jìn)入校園,系統(tǒng)推送報(bào)到流程,新生到達(dá)指定區(qū)域時(shí)推送報(bào)到導(dǎo)航信息,取代了人工導(dǎo)引的繁瑣工作。
系統(tǒng)功能:①具有良好的人機(jī)交互界面,符合用戶使用習(xí)慣,便于推廣;②定位學(xué)生位置,根據(jù)位置推送相關(guān)信息;③記錄某一時(shí)刻進(jìn)入某區(qū)域的人數(shù),方便管理監(jiān)控;④學(xué)生可主動(dòng)獲取信息。系統(tǒng)分組管理學(xué)生,向?qū)W生群組及時(shí)發(fā)布信息。
系統(tǒng)結(jié)合GPS和藍(lán)牙技術(shù)獲取位置信息,以主動(dòng)推送信息和學(xué)生端主動(dòng)獲取信息為功能主線,實(shí)現(xiàn)校園低成本便捷信息發(fā)布平臺(tái),有效提高效率。
1.2定位技術(shù)
校園內(nèi)定位技術(shù)分為室外和室內(nèi)定位技術(shù)。
1.2.1室外定位技術(shù)
目前主流的室外定位技術(shù)是全球定位系統(tǒng)GPS[1]。GPS是美國國防部所屬陸??杖娪谏鲜兰o(jì)70年代開始聯(lián)合研制,以衛(wèi)星為基礎(chǔ)的無線電三維導(dǎo)航系統(tǒng)。在應(yīng)用基礎(chǔ)研究、應(yīng)用領(lǐng)域開拓、硬件和軟件開發(fā)等方面都得到蓬勃發(fā)展。GPS和地圖應(yīng)用相結(jié)合,可以很好地解決校園室外定位問題[2]。
1.2.2室內(nèi)定位技術(shù)
近年來,國內(nèi)外學(xué)者致力于解決室外導(dǎo)航定位“最后一公里”瓶頸問題[3],涌現(xiàn)出大量相對成熟的室內(nèi)定位技術(shù),包括偽衛(wèi)星技術(shù)、輔助全球衛(wèi)星定位系統(tǒng)、超寬帶技術(shù)、WiFi定位技術(shù)、藍(lán)牙定位技術(shù)、射頻識別技術(shù)、地磁定位技術(shù)等。經(jīng)過對比研究,選擇適合校園室內(nèi)移動(dòng)用戶的藍(lán)牙定位技術(shù)。
相比于WiFi,藍(lán)牙信息發(fā)射器iBeacon成本很低,易于部署,定位準(zhǔn)確,在校園的食堂,報(bào)告廳、教室等區(qū)域部署iBeacon非常方便。系統(tǒng)架構(gòu)如圖1所示。
2系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2.1系統(tǒng)設(shè)計(jì)
如圖2所示,系統(tǒng)由基于GPS定位iBeacon感應(yīng)及信息推送系統(tǒng)組成,其工作流程如下:
(1)觸發(fā)。①當(dāng)學(xué)生在校園室外活動(dòng)時(shí),基于GPS調(diào)用百度地圖實(shí)現(xiàn)定位;②當(dāng)學(xué)生接近或進(jìn)入教學(xué)樓、圖書館、食堂等相對封閉的區(qū)域,進(jìn)入iBeacon基站覆蓋范圍時(shí),系統(tǒng)會(huì)接收基站的相關(guān)信息。
(2)服務(wù)器解析。APP在接收到GPS位置信息或iBeacon基站信息后,將位置和基站信息打包,通過WiFi或數(shù)據(jù)網(wǎng)絡(luò)發(fā)送給Web服務(wù)程序。
(3)消息推送。對APP發(fā)送的信息解析,確定學(xué)生的位置,檢索該區(qū)域消息,推送到學(xué)生手機(jī)。
2.2系統(tǒng)實(shí)現(xiàn)
2.2.1基于GPS的百度地圖定位
(1)申請秘鑰。百度地圖接口API需要申請開發(fā)者密鑰,將申請到的密鑰放到Android項(xiàng)目的配置文件中[17]。
(2)環(huán)境配置。聲明百度定位所需要的主要權(quán)限,包括訪問互聯(lián)網(wǎng)、網(wǎng)絡(luò)定位、GPS定位、讀取手機(jī)當(dāng)前狀態(tài)等,寫入擴(kuò)展存儲(chǔ)卡權(quán)限,用以寫入離線定位數(shù)據(jù)。
(3)實(shí)現(xiàn)過程。應(yīng)用百度的定位功能核心類LocationClient類完成定位[5]。LocationClient對象的創(chuàng)建需要在線程中完成,以應(yīng)用程序上下文getApplicationConext作為參數(shù),全局有效。根據(jù)校園定位要求,將定位模式設(shè)置為高精度模式。根據(jù)設(shè)計(jì),設(shè)定發(fā)起定位請求的時(shí)間間隔。
發(fā)出定位請求后,百度服務(wù)器異步返回定位結(jié)果,回調(diào)預(yù)先指定的監(jiān)聽函數(shù)。在回調(diào)函數(shù)中,將獲取的位置信息記錄下來,存到本機(jī)SQLite數(shù)據(jù)庫,判斷位置是否發(fā)生變化,將變化的位置信息提交給服務(wù)器。
2.2.2搜索iBeacon設(shè)備
(1)權(quán)限設(shè)置。聲明使用藍(lán)牙BLUETOOTH權(quán)限:
聲明掃描設(shè)備或者操作藍(lán)牙BLUETOOTH_ADMIN權(quán)限:
指定設(shè)備支持BLE,聲明uses-feature:
required為true,則應(yīng)用只能在支持BLE的Android設(shè)備上安裝運(yùn)行;required為false,Android設(shè)備均可正常安裝運(yùn)行,需要運(yùn)行時(shí)判斷設(shè)備是否支持BLE feature。[4]
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)){
finish();
}
(2)啟動(dòng)藍(lán)牙。獲取BluetoothAdapter:
BluetoothAdapter是Android系統(tǒng)中所有藍(lán)牙操作都需要的,它對應(yīng)本地Android設(shè)備的藍(lán)牙模塊,這里通過使用getSystemService獲取BluetoothManager,再通過BluetoothManager獲取BluetoothAdapter,BluetoothManager在Android4.3以上支持(API level 18)獲取[16]。 final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
判斷是否支持藍(lán)牙,并打開藍(lán)牙:
獲取到BluetoothAdapter之后,還需要判斷是否支持藍(lán)牙,以及藍(lán)牙是否打開[6]。如果沒打開則要讓用戶打開藍(lán)牙:
private BluetoothAdapter mBluetoothAdapter;
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
(3)搜索BLE設(shè)備。通過調(diào)用BluetoothAdapter的startLeScan()搜索BLE設(shè)備。調(diào)用此方法時(shí)需要傳入BluetoothAdapter.LeScanCallback參數(shù)。
需要實(shí)現(xiàn)BluetoothAdapter.LeScanCallback接口,BLE設(shè)備的搜索結(jié)果將通過回調(diào)函數(shù)返回。
為減少搜索時(shí)的功耗,找到對應(yīng)設(shè)備后立即停止掃描;為每次搜索設(shè)置了適合的時(shí)間限制,避免循環(huán)搜索,避免消耗電量。
系統(tǒng)設(shè)定10秒后停止掃描:
mHandler.postDelayed(new Runnable() {
public void run() {
mScanning = false; mBluetoothAdapter.stopLeScan(mLeScanCallback); }
}, 100000);
mScanning = true; mBluetoothAdapter.startLeScan(mLeScanCallback);
設(shè)定回調(diào)接口,編寫回調(diào)函數(shù)調(diào)用網(wǎng)絡(luò)服務(wù)。
Private BluetoothAdapter.LeScanCallback mLeScanCallback =new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
final iBeacon iBeacon =iBeaconClass.fromScanData(device,rssi,scanRecord);
runOnUiThread(new Runnable() {
@Override
public void run() {
SendToServer(iBeacon );
}
});
}
};
2.2.3服務(wù)器端位置解析及消息推送
手機(jī)客戶端和服務(wù)器遠(yuǎn)程數(shù)據(jù)交換,采用XML數(shù)據(jù)格式[67]。XML已經(jīng)被業(yè)界廣泛的使用[15],在編碼的可讀性及編碼的手寫難度上更加簡單,在服務(wù)器端和Android端都可以解析。
消息推送機(jī)制采用MQTT協(xié)議。MQTT協(xié)議簡單,最小的頭部只需2個(gè)字節(jié),特別適合于嵌入式,很多企業(yè)都使用MQTT作為Android手機(jī)客戶端與服務(wù)器端推送消息的協(xié)議[89]。
當(dāng)?shù)乩砦恢冒l(fā)生變化或掃描到新的iBeacon時(shí),Android端將百度地圖位置信息或iBeacon的UUID進(jìn)行XML格式序列化,通過HTTP請求發(fā)送到服務(wù)器。服務(wù)器解析,根據(jù)位置或iBeacon的UUID查詢位置信息,數(shù)據(jù)層根據(jù)用戶ID、位置ID及時(shí)間等,查詢當(dāng)前位置今日沒有發(fā)送給用戶的信息,將其封裝成XML,推送回手機(jī),手機(jī)端以列表方式顯示。
發(fā)送請求時(shí),調(diào)用Android Asynchronous Http Client一個(gè)回調(diào)式的Android網(wǎng)絡(luò)請求庫。使用它的原因在于:操作簡便,能異步發(fā)送HTTP請求,在回調(diào)函數(shù)中處理HTTP請求過程,線程池管理并發(fā)送,支持GET/POST請求,針對不同的網(wǎng)絡(luò)連接對重試次數(shù)進(jìn)行智能優(yōu)化等。
public static void getNewsList(int
uuid,AsyncHttpResponseHandler handler) {
RequestParams params =
new RequestParams();
params.put("uuid",uuid);
ApiHttpClient.get("action/api/news_list", params, handler);
}
服務(wù)器端推送消息采用php語言,實(shí)現(xiàn)過程如下:
引入指定文件
require(SAM/php_sam.php);
創(chuàng)建一個(gè)新的連接對象:
$conn = new SAMConnection();
初始化連接對象:
$conn->connect(SAM_MQTT, array(SAM_HOST => 127.0.0.1, SAM_PORT => 1883));
創(chuàng)造一個(gè)新的shell命令輸出MQTT消息體:
$msgCpu = new SAMMessage(“數(shù)據(jù)”);
發(fā)送消息:
$conn->send(topic://.$_REQUEST[target], $msgCpu);
斷開連接:
$conn->disconnect();
2.3移動(dòng)終端主動(dòng)請求數(shù)據(jù)
數(shù)據(jù)庫部署在服務(wù)器上,學(xué)生可以主動(dòng)查詢信息。
在移動(dòng)終端進(jìn)行數(shù)據(jù)請求時(shí),首先通過HttpURLConnection方式向服務(wù)器url發(fā)送HttpPost請求[1213],在服務(wù)器端接受請求并執(zhí)行數(shù)據(jù)查詢后,將查詢結(jié)果封裝為XML格式的數(shù)據(jù)并返回給客戶端??蛻舳私邮艿絏ML后,解析XML中的數(shù)據(jù)信息,并在界面上將其以列表方式輸出。
2.4新生報(bào)到校園導(dǎo)航
新生報(bào)到時(shí),用戶以賬號登錄后,百度地圖導(dǎo)航信息監(jiān)測到新生進(jìn)入校園,服務(wù)器將帶有報(bào)到信息的校園地圖發(fā)送到學(xué)生手機(jī),隨學(xué)生位置的變化,將報(bào)到點(diǎn)的信息及時(shí)發(fā)送到手機(jī),實(shí)現(xiàn)結(jié)果如圖4所示。
3結(jié)語
本文基于GPS和iBeacon實(shí)現(xiàn)了智能校園信息發(fā)布平臺(tái)解決方案,應(yīng)用Java和PHP實(shí)現(xiàn)了系統(tǒng)功能。
本研究成果可推廣到基于位置服務(wù)有需求的場所,如大型廠區(qū)、會(huì)展中心、大型購物中心、景點(diǎn)等,可以方便管理人員控制區(qū)域內(nèi)進(jìn)出人數(shù),提供預(yù)警信息,防止出現(xiàn)擁擠甚至踩踏事件。方便用戶通過手機(jī)了解區(qū)域內(nèi)的各類信息,如景點(diǎn)介紹、展廳內(nèi)促銷信息等,提供了良好的用戶體驗(yàn),有很好的實(shí)用性和應(yīng)用前景。
參考文獻(xiàn)參考文獻(xiàn):
[1]馬守瑞.GPS技術(shù)的發(fā)展及應(yīng)用現(xiàn)狀[J].華北國土資源,2012(4):142143.
[2]孟祥銳,費(fèi)龍,程彬.GPS技術(shù)在手機(jī)中的應(yīng)用淺析[J].長春師范學(xué)院學(xué)報(bào):自然科學(xué)版,2008(6):7578.
[3]楊立榮.基于ZigBee的室內(nèi)定位算法研究及優(yōu)化[D].濟(jì)南:山東大學(xué),2014.
[4]SAVAGE F MORGAN.Android4.3 藍(lán)牙BLE初步[EB/OL].http://www.cnblogs.com/savagemorgan/p/3722657.html.
[5]百度開發(fā)者.Androidlocsdk/guide/v50 Wiki [EB/OL].http://developer.baidu.com/map/wiki/index.php?title=androidlocsdk/guide/v50.
[6]徐麗仙.Eclipse開發(fā)環(huán)境中Android應(yīng)用程序獲取藍(lán)牙設(shè)備過程研究與實(shí)現(xiàn)[J].揚(yáng)州職業(yè)大學(xué)學(xué)報(bào), 2014(4):3133.
[7]梁書婷.基于Android平臺(tái)的遠(yuǎn)程桌面控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2013.
[8]黃河清,陳文.Android平臺(tái)消息推送服務(wù)的實(shí)現(xiàn)[J].電腦編程技巧與維護(hù), 2014(18):5355.
[9]姜妮,張宇,趙志軍.基于消息隊(duì)列遙測傳輸?shù)耐扑拖到y(tǒng)[J].計(jì)算機(jī)工程,2015(9):5355.
[10]陸奕帆,郭曉金,陳沉,等.基于Android的露營信息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2015(14):99102.
[11]陳靜涵, 邢健, 殷旭東.Android智能導(dǎo)游應(yīng)用開發(fā)技術(shù)研究[J].無線互聯(lián)科技,2015(7):6164.
[12]陳燕, 劉至洋, 楊雪君.基于Android平臺(tái)的博客客戶端設(shè)計(jì)與實(shí)現(xiàn)[J].才智,2013(5):281282.
[13]烏錚.基于Android平臺(tái)的手游社交應(yīng)用客戶端的設(shè)計(jì)與實(shí)現(xiàn) [D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.
[14]李宗骍.基于RSSI和地磁場特征融合的室內(nèi)定位算法設(shè)計(jì)與研究[D].南京:南京理工大學(xué),2015.
[15]王海波,耿暉,姜吉發(fā),等.基于XML的數(shù)據(jù)交換的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用, 2001(4):6768.
[16]李黎國,張輝,程號.基于Android健康服務(wù)終端藍(lán)牙傳輸軟件的設(shè)計(jì)[J].電子科技, 2012(5):115118.
[17]李驍.百度地圖API在Android中的配置和應(yīng)用[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2015(2):3738.
責(zé)任編輯(責(zé)任編輯:杜能鋼)