基于GPS和iBeacon的智能校园信息发布平台设计与实现
2016-11-07贾庆瑞宋丽红董静
贾庆瑞++宋丽红++董静
摘要:基于GPS和iBeacon实现智能校园信息发布平台。学生持手机进入校园后,服务器会实时获取学生的位置信息,向学生推送校园内各区域信息。新生入学,服务器发送报到流程中各位置的信息,新生到达指定位置时,推送帮助消息,提高了报到效率,节省了大量人力和时间。
关键词:iBeacon;Android系统;PHP;位置服务
DOIDOI:10.11907/rjdk.161562
中图分类号:TP319
文献标识码:A文章编号文
章编号:16727800(2016)009006903
基金项目基金项目:2015年地方高校国家级大学生创新创业训练计划项目(201510070005)
作者简介作者简介:宋丽红(1975-),女,天津人,博士,天津财经大学理工学院副教授,研究方向为软件工程、智能信息系统;董静(1975-),女,天津人,博士,天津财经大学理工学院讲师,研究方向为软件工程。
0引言
很多高校发布信息时大多还是公告板、电话或者群发,学生由于不能及时获取信息而错过活动。信息收发途径是否便捷、及时,以及受众面的大小直接决定了信息的广泛性和时效性。新生报到时,大多数学校还是由学生和教师组成志愿者队伍进行引导和服务,付出很大的精力和时间但效率不高,研究适合校园的高效可靠低成本智能信息发布平台迫在眉睫。
“你在哪里?你身边有什么资源?”由美国学者Schilit在1994年首次提出,即基于位置服务LBS(Location Based Services)。本文根据学生位置推送与该位置相关的信息,学生也可以主动获取信息,设计并实现了基于GPS和iBeacon的校园信息发布系统,
1系统设计
1.1系统功能设计
本系统基于学生位置,推送各类信息,如学术活动、社团活动、图书馆新书信息、食堂优惠信息等;新生进入校园,系统推送报到流程,新生到达指定区域时推送报到导航信息,取代了人工导引的繁琐工作。
系统功能:①具有良好的人机交互界面,符合用户使用习惯,便于推广;②定位学生位置,根据位置推送相关信息;③记录某一时刻进入某区域的人数,方便管理监控;④学生可主动获取信息。系统分组管理学生,向学生群组及时发布信息。
系统结合GPS和蓝牙技术获取位置信息,以主动推送信息和学生端主动获取信息为功能主线,实现校园低成本便捷信息发布平台,有效提高效率。
1.2定位技术
校园内定位技术分为室外和室内定位技术。
1.2.1室外定位技术
目前主流的室外定位技术是全球定位系统GPS[1]。GPS是美国国防部所属陆海空三军于上世纪70年代开始联合研制,以卫星为基础的无线电三维导航系统。在应用基础研究、应用领域开拓、硬件和软件开发等方面都得到蓬勃发展。GPS和地图应用相结合,可以很好地解决校园室外定位问题[2]。
1.2.2室内定位技术
近年来,国内外学者致力于解决室外导航定位“最后一公里”瓶颈问题[3],涌现出大量相对成熟的室内定位技术,包括伪卫星技术、辅助全球卫星定位系统、超宽带技术、WiFi定位技术、蓝牙定位技术、射频识别技术、地磁定位技术等。经过对比研究,选择适合校园室内移动用户的蓝牙定位技术。
相比于WiFi,蓝牙信息发射器iBeacon成本很低,易于部署,定位准确,在校园的食堂,报告厅、教室等区域部署iBeacon非常方便。系统架构如图1所示。
2系统设计与实现
2.1系统设计
如图2所示,系统由基于GPS定位iBeacon感应及信息推送系统组成,其工作流程如下:
(1)触发。①当学生在校园室外活动时,基于GPS调用百度地图实现定位;②当学生接近或进入教学楼、图书馆、食堂等相对封闭的区域,进入iBeacon基站覆盖范围时,系统会接收基站的相关信息。
(2)服务器解析。APP在接收到GPS位置信息或iBeacon基站信息后,将位置和基站信息打包,通过WiFi或数据网络发送给Web服务程序。
(3)消息推送。对APP发送的信息解析,确定学生的位置,检索该区域消息,推送到学生手机。
2.2系统实现
2.2.1基于GPS的百度地图定位
(1)申请秘钥。百度地图接口API需要申请开发者密钥,将申请到的密钥放到Android项目的配置文件中[17]。
(2)环境配置。声明百度定位所需要的主要权限,包括访问互联网、网络定位、GPS定位、读取手机当前状态等,写入扩展存储卡权限,用以写入离线定位数据。
(3)实现过程。应用百度的定位功能核心类LocationClient类完成定位[5]。LocationClient对象的创建需要在线程中完成,以应用程序上下文getApplicationConext作为参数,全局有效。根据校园定位要求,将定位模式设置为高精度模式。根据设计,设定发起定位请求的时间间隔。
发出定位请求后,百度服务器异步返回定位结果,回调预先指定的监听函数。在回调函数中,将获取的位置信息记录下来,存到本机SQLite数据库,判断位置是否发生变化,将变化的位置信息提交给服务器。
2.2.2搜索iBeacon设备
(1)权限设置。声明使用蓝牙BLUETOOTH权限:
声明扫描设备或者操作蓝牙BLUETOOTH_ADMIN权限:
指定设备支持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系统中所有蓝牙操作都需要的,它对应本地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设备。通过调用BluetoothAdapter的startLeScan()搜索BLE设备。调用此方法时需要传入BluetoothAdapter.LeScanCallback参数。
需要实现BluetoothAdapter.LeScanCallback接口,BLE设备的搜索结果将通过回调函数返回。
为减少搜索时的功耗,找到对应设备后立即停止扫描;为每次搜索设置了适合的时间限制,避免循环搜索,避免消耗电量。
系统设定10秒后停止扫描:
mHandler.postDelayed(new Runnable() {
public void run() {
mScanning = false; mBluetoothAdapter.stopLeScan(mLeScanCallback); }
}, 100000);
mScanning = true; mBluetoothAdapter.startLeScan(mLeScanCallback);
设定回调接口,编写回调函数调用网络服务。
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服务器端位置解析及消息推送
手机客户端和服务器远程数据交换,采用XML数据格式[67]。XML已经被业界广泛的使用[15],在编码的可读性及编码的手写难度上更加简单,在服务器端和Android端都可以解析。
消息推送机制采用MQTT协议。MQTT协议简单,最小的头部只需2个字节,特别适合于嵌入式,很多企业都使用MQTT作为Android手机客户端与服务器端推送消息的协议[89]。
当地理位置发生变化或扫描到新的iBeacon时,Android端将百度地图位置信息或iBeacon的UUID进行XML格式序列化,通过HTTP请求发送到服务器。服务器解析,根据位置或iBeacon的UUID查询位置信息,数据层根据用户ID、位置ID及时间等,查询当前位置今日没有发送给用户的信息,将其封装成XML,推送回手机,手机端以列表方式显示。
发送请求时,调用Android Asynchronous Http Client一个回调式的Android网络请求库。使用它的原因在于:操作简便,能异步发送HTTP请求,在回调函数中处理HTTP请求过程,线程池管理并发送,支持GET/POST请求,针对不同的网络连接对重试次数进行智能优化等。
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语言,实现过程如下:
引入指定文件
require(SAM/php_sam.php);
创建一个新的连接对象:
$conn = new SAMConnection();
初始化连接对象:
$conn->connect(SAM_MQTT, array(SAM_HOST => 127.0.0.1, SAM_PORT => 1883));
创造一个新的shell命令输出MQTT消息体:
$msgCpu = new SAMMessage(“数据”);
发送消息:
$conn->send(topic://.$_REQUEST[target], $msgCpu);
断开连接:
$conn->disconnect();
2.3移动终端主动请求数据
数据库部署在服务器上,学生可以主动查询信息。
在移动终端进行数据请求时,首先通过HttpURLConnection方式向服务器url发送HttpPost请求[1213],在服务器端接受请求并执行数据查询后,将查询结果封装为XML格式的数据并返回给客户端。客户端接受到XML后,解析XML中的数据信息,并在界面上将其以列表方式输出。
2.4新生报到校园导航
新生报到时,用户以账号登录后,百度地图导航信息监测到新生进入校园,服务器将带有报到信息的校园地图发送到学生手机,随学生位置的变化,将报到点的信息及时发送到手机,实现结果如图4所示。
3结语
本文基于GPS和iBeacon实现了智能校园信息发布平台解决方案,应用Java和PHP实现了系统功能。
本研究成果可推广到基于位置服务有需求的场所,如大型厂区、会展中心、大型购物中心、景点等,可以方便管理人员控制区域内进出人数,提供预警信息,防止出现拥挤甚至踩踏事件。方便用户通过手机了解区域内的各类信息,如景点介绍、展厅内促销信息等,提供了良好的用户体验,有很好的实用性和应用前景。
参考文献参考文献:
[1]马守瑞.GPS技术的发展及应用现状[J].华北国土资源,2012(4):142143.
[2]孟祥锐,费龙,程彬.GPS技术在手机中的应用浅析[J].长春师范学院学报:自然科学版,2008(6):7578.
[3]杨立荣.基于ZigBee的室内定位算法研究及优化[D].济南:山东大学,2014.
[4]SAVAGE F MORGAN.Android4.3 蓝牙BLE初步[EB/OL].http://www.cnblogs.com/savagemorgan/p/3722657.html.
[5]百度开发者.Androidlocsdk/guide/v50 Wiki [EB/OL].http://developer.baidu.com/map/wiki/index.php?title=androidlocsdk/guide/v50.
[6]徐丽仙.Eclipse开发环境中Android应用程序获取蓝牙设备过程研究与实现[J].扬州职业大学学报, 2014(4):3133.
[7]梁书婷.基于Android平台的远程桌面控制系统的设计与实现[D].哈尔滨:哈尔滨工业大学,2013.
[8]黄河清,陈文.Android平台消息推送服务的实现[J].电脑编程技巧与维护, 2014(18):5355.
[9]姜妮,张宇,赵志军.基于消息队列遥测传输的推送系统[J].计算机工程,2015(9):5355.
[10]陆奕帆,郭晓金,陈沉,等.基于Android的露营信息系统设计与实现[J].电视技术,2015(14):99102.
[11]陈静涵, 邢健, 殷旭东.Android智能导游应用开发技术研究[J].无线互联科技,2015(7):6164.
[12]陈燕, 刘至洋, 杨雪君.基于Android平台的博客客户端设计与实现[J].才智,2013(5):281282.
[13]乌铮.基于Android平台的手游社交应用客户端的设计与实现 [D].哈尔滨:哈尔滨工业大学,2014.
[14]李宗骍.基于RSSI和地磁场特征融合的室内定位算法设计与研究[D].南京:南京理工大学,2015.
[15]王海波,耿晖,姜吉发,等.基于XML的数据交换的实现[J].计算机应用, 2001(4):6768.
[16]李黎国,张辉,程号.基于Android健康服务终端蓝牙传输软件的设计[J].电子科技, 2012(5):115118.
[17]李骁.百度地图API在Android中的配置和应用[J].计算机光盘软件与应用,2015(2):3738.
责任编辑(责任编辑:杜能钢)