APP下载

基于GPS和iBeacon的智能校园信息发布平台设计与实现

2016-11-07贾庆瑞宋丽红董静

软件导刊 2016年9期
关键词:Android系统位置服务

贾庆瑞++宋丽红++董静

摘要:基于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.

责任编辑(责任编辑:杜能钢)

猜你喜欢

Android系统位置服务
互联互通 畅享未来 第12届卫星导航与位置服务运营商大会在深圳举行
第六届中国卫星导航与位置服务年会暨首届卫星应用国际博览会
Android系统上的移动互联网集成平台开发机制
中位协二十周年庆典暨第四届中国卫星导航与位置服务年会将在北京举行
位置服务中服务点空间可达性评估模型分析