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