APP下载

百里毅行应用系统设计与实现

2018-01-15窦亚玲谢旭伟

现代计算机 2017年34期
关键词:行者百度功能

窦亚玲 ,谢旭伟

(1.湖南师范大学高性能计算与随机信息处理省部共建教育部重点实验室;2.湖南师范大学数学与计算机科学学院,长沙410081)

0 引言

中国运动人群基数不断扩大,运动健身已经成为一种生活方式。湖南百里毅行是一项大型群众性公益体育运动,每年举办两次,每次参加人数达万人。全国各地类似的毅行活动也在如火如荼地开展之中。由于百里毅行活动参加人数多,毅行者的专业化程度要求不高,而活动的持续时间较长,路线比较复杂,因此,对活动的组织要求就变得很高。为了能让百里毅行活动安全、健康和顺利地举办成功,除了活动的组织方需要投入大量的人力、物力之外,还需要大量的志愿者参与服务。即便如此,每次活动开展下来,无论是活动组织方还是各类参与人员,都会感受到一些不如意之处。例如:组织方对毅行者到达服务点的密度无法准确预估,导致服务点资源准备不足,拥挤现象时有发生;毅行者对前方服务点信息不了解,无法合理安排自己的毅行计划,等等。因此,百里毅行活动迫切需要一种先进的信息化手段来弥补目前模式下的不足,提高活动组织方的组织能力、降低成本、提升服务质量和效率、改善毅行者的运动体验等。

随着移动互联网技术的发展,与运动健身相关的互联网应用及手机App大量涌现。有利用互联网进行毅行活动宣传和报名的系统;有利用手机地图发布毅行路线轨迹的App;更多的应用系统关注的是运动者个体的运动信息的采集、记录与展现。但到目前为止还没有一个针对百里毅行活动全过程支撑的应用系统。

本文研究的应用系统主要是一个手机App系统,旨在建立百里毅行组织方、毅行者和赞助商三者之间互相连接与信息交换的系统:一方面方便毅行者定位导航、获取自身健康状况、求助、接收组织方推送的消息以及赞助商提供的服务信息;另一方面帮助组织方获取毅行者的实时位置、安全和健康等信息,有利于有序调度资源,保障活动顺利完成;同时,为商家提供潜在的需求资讯。

1 系统总体设计

1.1 系统总体架构

本应用系统采用三层客户机/服务器架构[1-3],如图1所示。

各手机App客户端通过无线网络连接到应用服务器,由应用服务器完成用户认证、信息的交换与共享等基础业务功能,并将信息存放到数据库中。管理PC客户端通过浏览器访问Web服务器,主要负责用户管理、信息发布和数据统计与显示等功能。由于管理PC客户端的主要功能与手机App类似,后面就不再单独描述了。

图1 系统总体架构图

1.2 手机App总体结构

手机App客户端总体结构分为四层,包括UI(用户界面层)、业务逻辑层、数据访问层和数据存储层四个部分[1,4]。客户端总体结构如图2所示。

图2 手机App客户端总体结构图

(1)用户界面层

系统中的XML布局文件可用于对界面进行描述,可用来绘制系统自带的UI组件。用户也可以引用App环境中的图片、颜色、样式等资源自定义组件并在XML布局文件中描述,Activity用setContentView方法即可引用该XML布局文件。

(2)业务逻辑层

开发者在Activity中引用XML布局文件后,即可在Activity中对逻辑业务功能进行处理。用适配器(Data Adapter)完成UI控件与数据之间的绑定。用Intent实现多个Activity之间的通信。用Event Listener处理捕捉用户点击触摸等事件。

(3)数据持久层

由于App不但需要从本系统服务端获取数据,还要调用百度地图接口,从百度地图服务器获取云数据,同时,为了提高系统响应速度,节约流量以及断网时还能使用本系统的基本功能,本地也有数据的缓存机制。本层提供与网络服务器数据交换中的数据封装和解析处理以及与本地缓存数据之间的协调应用等功能。

(4)数据存储层

本系统中的数据来源于用户的录入操作、手机端设备的采集以及百度地图定位服务(LBS)提供的云数据,有效数据最终都将存储到网络上的数据库服务器中。

1.3 手机App功能设计

活动组织方、毅行者和赞助商登录手机App后都有自己权限内的功能。由于赞助商手机App的功能主要是信息发布和反馈意见收集和统计,故不在本文中详细描述。

(1)组织方手机App功能设计

组织方手机App功能模块结构图如图3所示。

图3 组织方手机App功能模块结构图

注册登录:组织方的所有人员都需要先注册(除PC端的系统管理员外),由PC端的系统管理员审核后激活其账户并分配给合适的权限。系统权限主要分为志愿者、现场组织者、管理者等。激活后的用户可以使用权限内的功能。

信息发布浏览统计:由管理者发布原始信息,所有用户能浏览信息并可在该消息后反馈信息;系统自动将信息发布情况、反馈情况的统计数据分类别显示出来。

路线制定:管理者将本次毅行活动的分组、规模及路线规划信息,标注到百度地图上,并提供轨迹数据的下载服务。

资源管理:管理者可录入、修改本次活动的所有资源,包括志愿者、现场组织者、医护人员、饮食、车船等交通工具、垃圾桶、厕所、休息点、帐篷、住宿等的信息,对这些资源在毅行路线上的分配给出方案,并在百度地图上标记,提供与轨迹数据一致的下载服务。志愿者、现场组织者能对所在区域的资源变化情况提交修改请求,由管理者审核后生效。

报名与缴费管理:管理者对毅行者的报名情况、组队情况以及缴费情况进行审核,给出是否通过的意见。

检录签到及退赛管理:通过扫描毅行者手机显示的二维码,完成对应的功能,并将毅行者信息、扫码时间和地点、操作者信息、当前操作的事项等记录到数据库中。

物资及奖证发放:通过扫描毅行者手机显示的二维码,自动核对其信息(包括是否符合条件以及是否已发等)后完成对应的功能,并记录相关信息。

人员交互:包括人员查找、定位、呼叫以及文字交流等功能。

救援管理:接收求助请求(能显示求助位置),救援方案生成与发布(相关人员将收到救援的提示信息),管理救援预案。

热力图与过程回放:显示指定时刻或时间段的全局或指定区域的热力图或热力图变化;显示主要的统计信息;回放指定人员的轨迹过程。

(2)毅行者手机App功能设计

毅行者手机App功能模块结构图如图4所示。

报名登录:毅行者填写完整的报名信息,通过审核后即可登录,登录之后确定分组和组队情况。

登录之后可以查看系统发布的信息,并可以反馈意见;可以下载路线轨迹及资源分布信息,以备脱网时仍可以在地图上显示与查看。在规定的检录点可以通过显示本人实时生成的二维码完成签到、领取物资或奖证的功能,也可提交退赛的请求。

个人状态显示功能与传统的健身运动App的功能类似,能显示本人的位置、海拔、速度/步速、每公里速度、完成路程/步数、能量消耗等信息。

人员互动功能将在地图上显示本队人员的图标、名字与位置,点击本队人员的图标即可与之文字互动。也可以点击资源图上志愿者、现场组织者、医护人员的图标,向其发起文字互动。

当遇到紧急情况需要求助时,可以使用求助功能,系统将通过救援管理机制快速响应。

热力图与过程回放:显示当前的全局热力图情况;回放自己和本队指定人员的轨迹过程。

图4 毅行者手机App功能模块结构图

1.4 数据库设计

本系统选择MySQL作为后台数据库管理系统。与毅行者用户相关的数据库表主要包括用户信息表、用户注册状态表、用户分组表,用户轨迹表,用户签到表,用户运动信息表,用户事件表等;与活动相关的信息表包括:毅行路线表、签到点表、物资表、人力资源表、资源分配表、通知信息表、活动事件表、互动信息表等。

用户信息表是本系统的基础,其具体定义如表1所示。其中,用户ID是与其他表信息关联的重要字段,而用户权限UP决定了该用户的角色是毅行者、志愿者、组织者还是管理者等。

表1 用户信息表

2 关键技术设计与实现

2.1 手机定位功能

移动定位技术就是将获取到的手机或移动终端的位置信息显示在移动终端的电子地图上[5-7]。本系统利用百度地图API提供的定位功能接口[8-9],通过调用百度地图开发接口实现手机的定位功能。

将定位功能与方向传感器结合起来,可以控制定位的图标方向,也即定位图标会随着手机方向的转动而转动,从而实现有方向定位的目的。方向传感器可以监测到手机在X,Y,Z轴方向上的偏移量,但由于手机一般是在一个平面内转动,所以只需要用方向传感器去实时监测X轴方向的偏移量即可。当X轴方向的当前偏移值与上一次偏移值的绝对值超过一个临界值时,就可以判定方向发生改变。

用户输入签到点即可获取百里毅行步行路线导航,也可点击签到点的标志进行导航到特定的签到点。地图定位及导航界面如图5、图6所示。

图5 地图定位

图6 路线导航

使用百度地图API之前需要到指定的网址http://lbsyun.baidu.com/apiconsole/key申请 APIKey密钥,然后把百度地图开发jar包复制到自己的工程app/libs目录下,配置好后调用。

手机设备大都内置了各种功能传感器,开发者可以通过手机操作系统平台提供的统一传感器硬件抽象层接口来调用。下面以方向传感器的调用为例说明开发方法(计步器等类似):

private SensorManagermSensorManager;

private SensormSensor;

public MyOrientationListener(Contextcontext)

{this.mContext=context;}

public voidstart()

{mSensorManager=(SensorManager)mContext.

getSystemService(Context.SENSOR_SERVICE);

if(mSensorManager!=null)//获得传感器服务

mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE ORIENTATION);//获得方向传感器

if(mSensor!=null)

mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY UI);//注册监听器

}

@Override//方向改变判断

public voidonSensorChanged(SensorEventevent)

{if(event.sensor.getType()==Sensor.TYPE_ORIENTATION)

{float x=event.values[SensorManager.DATA_X];

if(Math.abs(x-lastX)>1.0)

{if(mOnOrientationListener!=null)

mOnOrientationListener.onOrientationChanged(x);}}

lastX=x;}

2.2 实时统计图功能

实时统计图功能以JavaScript开发技术为主,引入jQuery与Highcharts技术,实现功能强大且美观的实时统计图表,包括曲线图、柱状图、饼状图、散状点图、区域图和综合图表[10-12]。实现的方法主要有以下两步。

首先需要配置开发环境,在HTML页面引入jQuery与Highcharts库,代码如下:

然后从数据库获取需要的数据,加载并设置数据到页面,调用highcharts(json)方法将数据传入,最终实现Highcharts统计图。其核心代码如下:

var json={};

json.chart=chart;

json.title=title;

json.yAxis=yAxis;

json.tooltip=tooltip;

json.series=series;

json.plotOptions=plotOptions;

$('#container').highcharts(json);

其中一部分的实现效果如图7至图10所示。

图7 毅行者年龄层次及男女比例分布图

图8 毅行者各签到点人数及男女比例分布图

2.3 消息推送功能

消息的推送采用个推推送技术实现[13-15]。首先,手机App端集成个推SDK,应用服务器端集成个推服务器提供的推送API;然后,系统按照图11所示的顺序进行消息推送处理。

第一步:手机App调用个推SDK初始化接口,获取推送标识ClientID(简称CID);

第二步:手机App将CID上传到应用服务器进行保存。通常需要将该CID与相应的用户ID进行关联,以便后续针对特定用户进行消息推送;

第三步:应用服务器需要给指定CID的设备发送透传数据(Payload)时,调用个推服务器消息推送接口,将消息下发给相应手机App下的个推SDK后台服务,进而将Payload发送给手机App进行后续处理。手机App可以实时接收到后台发送的消息。

图9 计步器数据显示

图10 毅行者平均步速动态走势图

个推SDK服务在手机平台上可以长期后台运行。由于采用了特殊设计的省电省流量技术,后台服务对手机设备的影响非常小。当网络不稳定时,个推SDK服务处于离线状态,待网络条件恢复后,会立即重连上线,并且重新接收在离线期间服务端推送的消息。图12是手机App接收到的消息列表示意图。

3 结语

本文针对全国越来越广泛开展的毅行活动中缺乏有效的信息化管理与服务手段的问题,以湖南百里毅行活动中常见的需求为背景,设计实现了以手机App为主要操作客户端的应用系统。该系统基于成熟的手机App开发技术,以百度地图为支撑,通过调用智能手机传感器以及集成个推推送技术,较好地满足了设计要求。该应用系统的功能较为完善,实现了百里毅行活动的全程管理,能较好地提高百里毅行活动组织方工作人员的工作效率和服务质量,辅助毅行者更好地完成百里毅行活动以及为活动赞助商提供一个有针对性的宣传平台。

图11 个推推送的处理顺序示意图

图12 手机APP接收到的推送消息列表

[1]刘亚秋,吴双满,韩大明,等.基于云计算的手机智能出租车呼叫系统[J].计算机工程,2014,40(4):14-18.

[2]严武军.基于Android校园活动App系统设计与实现[J].现代计算机,2015(28):70-71.

[3]王勇,李业芝,王瑛,等.基于工作流和智能手机的城市综合管理平台[J].计算机工程与设计,2014,35(12):4390-4394.

[4]李佐彬.Android开发入门与实战体验[M].北京:机械工业出版社,2011.

[5]杨国林.GPS技术在导航电子地图中的应用研究[J].科技信息(学术版),2006(3):70-71。

[6]李业芝,王勇,王瑛.基于GIS和智能手机的监控与应急指挥系统.计算机工程与设计,2014,35(9):3326-3331.

[7]郑伟.基于Android的百度地图车辆定位系统设计与实现[D].呼和浩特:内蒙古大学,2014.

[8]杜传明.百度地图API在小型地理信息系统中的应用[J].测绘与空间地理信息,2011,34(2):152-153.

[9]张凯,陈峰,杜警.城市公交实时位置手机查询系统设计[J].计算机工程与科学,2014,36(7):1296-1300.

[10]孙更新,宾晟,宫生文.Java程序开发大全[M].北京:中国铁道出版社,2010.

[11]Richard Monson-Haefel.J2EE Web Services[M].Addison-Wesley Longman Publishing Co.,Inc.,2003.

[12]张俊杰,张海燕,罗锐.基于Android平台的移动GIS研究与实现[J].计算机工程与设计,2013,34(9):3322-3326.

[13]刘永玲,刘兀,郭克华.一种面向移动终端的自适应消息推送策略[J].计算机工程与科学,2013,35(12):114-119.

[14]姜妮,张宇,赵志军.基于消息队列遥测传输的推送系统[J].计算机工程,2015,41(9):1-6.

[15]王克锋.基于Android的信息推送管理系统的设计和实现[D].大连:大连理工大学,2012.

猜你喜欢

行者百度功能
99Tcm-MIBI显像在甲状旁腺功能亢进术前诊断中的应用价值
做“两个确立”的忠实践行者
逆行者
基层弄虚作假的“新功能取向”
把党史的功能作用发挥得更加充分有效
Cлово месяца
最美逆行者
Robust adaptive UKF based on SVR for inertial based integrated navigation
奔驰S级香氛功能介绍
百度年度热搜榜