APP下载

基于Android手机传感器在健身领域的运用

2017-09-03黄卓勋郭湘南

电子设计工程 2017年15期
关键词:百度数据库软件

黄卓勋,郭湘南

(1.武汉邮电科学研究院 湖北 武汉 430074;2.烽火通信科技股份有限公司 湖北 武汉 430074)

基于Android手机传感器在健身领域的运用

黄卓勋1,郭湘南2

(1.武汉邮电科学研究院 湖北 武汉 430074;2.烽火通信科技股份有限公司 湖北 武汉 430074)

为了满足市民日益增长的健身需求,结合智能手机有很高普及率的现状,提出一种运用安卓手机自带的传感器来监测,规范,管理用户健身运动的应用实现。在Android手机系统的应用层开发,主要运用的有手机的加速度传感器 ,方向传感器,亮度传感器等等,实现对常见的健身运动如仰卧起坐,平板运动,跑步等进行测量与记录。运用表明,相比自发性锻炼,此方法可使健身运动更科学与精确,对用户坚持健身起到积极作用。

Android;智能手机;传感器监测;健身运动

随着科技与经济的发展,智能手机的普及率已逐步提升,但高压力的都市生活也影响了人们的身体健康,健身运动也随之流行起来。然而可惜的是并不是所有人都能有充足的时间与金钱去健身房,这就产生了如何在家里也能够科学有效健身运动的问题。对一般人而言,家中独自运动相比健身房而言,所欠缺的是器械种类不全,健身教练的指导监督以及引导积极的运动氛围。如果能结合Android智能手机与健身运动来有效解决这些问题,将对人们自发锻炼,提高身体素质起到积极作用。器械种类不全的问题,由于涉及到硬件条件,经济状况不同,较难独自解决,但对于健身的指导监督和对坚持锻炼的引导,则可以在Android智能手机的帮助下实现。

手机传感器是安卓手机上所有可用感应器,能够识别该手机硬件支持哪些传感器,并提供对我们日常生活起着重要作用的传感工具。目前主流的Android手机都配备有通用传感器,可以对加速度,方向,亮度等环境参数进行检测,而这些参数也可以体现在健身运动当中,从而侧面来监控并记录健身数据。常见且条件要求简单锻炼方式,如跑步,仰卧起坐,跳绳,平板运动等,都可以利用Android手机完成监控。在此前提下,开发一款高效、稳定、可靠的Android手机健身程序是可行且有意义的。本文提出的一种Android手机健身程序可以实现对健身动作的简单识别,满足健身辅助的基本功能。

1 Android手机健身辅助应用开发

1.1 应用程序系统构架

此应用基于Android架构,可以大致分为4层结构,5个区域。

1)Linux内核层

Android系统是基于Linux2.6内核的,Linux内核层是给Android设备的多类硬件提供底层驱动工作的,比如显示驱动,摄像驱动,音频播放驱动,蓝牙连接驱动,Wi-Fi的驱动,电源的管理驱动等[1]。

2)系统运行库层

系统运行库层是通过C/C++库来为手机系统提供主要特性支持的,如它的OpenGL/ES库提供了3D绘图的支持,SQLite库可以提供数据库相关支持,Webkit库是用来支持浏览器内核的等。

在系统运行库层同时也有Android运行时库,这些主要是用来提供了一些核心库的,可以帮助开发者用Java语言来开发Android应用。另外在这些库中还包含了Dalvik虚拟机,不同于Java虚拟机,这个是专门为移动设备服务的,所以针对手机内存和CPU性能会是有限的等情况作了优化。

3)应用框架层

应用框架层[2]主要是提供在构成应用程序时也许会用到的各种API,在Android中常见的一些核心自带应用就是基于这些API开发的,我们软件开发者也可以利用这些API来编写独自的应用。

4)应用层

所有安装在手机上的应用程序都是属于应用层的[3-4],例如系统默认的联系人列表,短信服务等程序,也包括那些从网上下载的应用,当然,其中也包括了本应用。

1.2 应用程序工作原理

打开软件,执行相应健身运动时,首先会在程序的开始检测手机是否自带有需要的传感器类型。当存在对应的传感器时,自动在软件中注册并新建传感器[5-6],准备监测特定的运动状态。不同的健身运动会用到不同的传感器,有的也会用到多个传感器。情形如图1所示。

运动监测[7-8]主要运用的有各类型手机传感器,系统的Timer计时器,SQLite手机数据库,部分运动还利用了百度地图定位API。传感器用于获取用户的运动参数[9],Timer计时器用于获取运动时间来计算卡路里等数据,SQLite数据库[10]用于储存运动的详细信息便于查询,百度地图API用于获取室外跑步距离的参数。整款软件是基于JAVA程序编写的。

图1 健身软件与手机传感器交互

1.3 应用程序工作流程

整个应用程序的流程如图2所示。

图2 健身软件运行流程

1)初始化程序:为程序运行创建环境,建立数据库,根据用户是否第一次进入程序来决定显示引导栏目与否。

2)检测传感器是否存在:如果存在,则尝试软件注册并新建传感器,等待程序调用,如果没有传感器,则弹出提示,说明给用户程序无法继续进行。

3)开始健身运动:将手机放置在合适的位置以便检测健身运动参数后,用户确认开始后,开始自己的运动。

4)检测是否获取到运动参数:用户确认运动,计时器开始计时,应用程序开始尝试获取运动参数,当获取到参数时,记录原始参数,判断其是否合理,舍掉不合理有误的部分。如果没获取到参数,则尝试重新获取直到获取到参数。如果一直未获取到,则弹出提示,说明获取失败。

5)整理参数并计算卡路里等数值:获取计时器的计时,将原始参数带入提前设置在应用里的计算公式,计算卡路里等非直观参数。

6)查询此日期是否已有无数据:获取系统日期与用户名称,根据日期与名称查询SQLite数据库[11-12],查看此条件下有无数据,有数据则将数据更新,覆盖掉旧的数据,没有数据则新增数据,保存数据至SQLite数据库。

7)输入数据查询条件:当用户进入查询界面时,提示输入查询条件,如果条件输入有误则弹出提示。

8)查询此条件下有无数据:根据用户输入的日期,运动种类,查询范围等条件查询数据库,如果有数据则显示出来,没有则提示用户查无数据。

9)将查到的数据显示出来。

2 关键技术及具体实现

2.1 关键技术说明

1)手机传感器

与普通传感器不一样,手机传感器内置于智能手机内,所以需要体积足够小,在满足一般使用需求条件下,可以牺牲部分性能。一般来说只能检测到变化,如果检测的属性没有变化,显示的数值可能会不准确。常见的手机传感器有以下几种:

加速度传感器,又叫G-sensor,它会返回手机三轴方向的加速度数值,该数值包含地心引力的影响,单位是m/s2。

磁力传感器,也可以简称为M-sensor,返回手机三轴方向所处磁场的强度,该数值的单位是微特斯拉,用uT表示。

方向传感器,简称为O-sensor,返回三轴方向的角度数据,数据的单位是度,为了获取精确的数据,它需要获取G-sensor的数据来计算,否则就只能得到水平方向的角度数据。

光线感应传感器,这个传感器可以检测实时的光线强度数据,单位是lux,它的物理意义为照射到单位面积上光通量数值,磁传感器主要用于Android系统的LCD自动调节亮度,可以根据实时光强来调整屏幕亮度。

2)SQLite数据库

SQLite数据库是一个嵌入式库,它实现了零配置且无服务端和事务功能的SQL数据库平台引擎,被广泛地使用。SQLite的单线程读写性能可以和MySQL相比,并且还能保证ACID性。它的存储后端是基于Btree完成的,且多个连接可以并发操作,但是在同一时刻只能允许一个写连接存在。在硬盘上面数据库和文件一一对应,在每个数据库的文件头部储存有此数据库的元信息,包括数据库的版本,大小和Btree的根节点位置等。SQLite将每个数据库以页为单位进行分类来管理,每一页默认为512字节,也可以看做此硬盘的sector大小。

3)百度地图API

百度地图API[13-14]是为百度开发者所免费提供的基于百度地图应用的一套数据接口,它有着JavaScript API版本,Web 服务 API版本、Android SDK、iOS SDK、地图定位SDK、车联网API及LBS云等多种版本,来适应各种场合需求,它能提供基本的地图展现功能及搜索定位功能、逆/地理编码功能、路线策划功能、LBS云存储功能和检索等功能,不仅适用于PC端也能在移动端、服务器等多种设备上适用,能在多种操作系统下完成地图应用开发。

本软件使用的是百度移动版地图SDK其中的Android版[15],为移动手机的地图应用开发提供基本地图搜索与定位等服务。在使用该套SDK之前,需要先申请百度秘钥。

2.2 具体实现方法

软件在Android Studio中的结构如图3所示。

图3 健身辅助程序结构图

主要的目录为:①assets目录:存放健身指导文件;②about目录:存放健身软件介绍的代码;③inside目录:存放室内活动相关的代码;④menu目录:存放菜单界面及引导界面的代码;⑤outdoor目录:存放户外活动相关的代码;⑥setting目录:存放设置相关的代码;⑦statistics目录:存放数据统计相关的代码;⑧db目录:存放数据库架构及查询代码;⑨listener目录:存放自定义接口代码;⑩tools目录:存放工具类(如计时器等)相关代码。

1)手机传感器核心代码

要想在软件中使用手机传感器,首先得在代码中对传感器新建与注册,这里以加速度传感器检测跳绳运动为例,TYPE_ACCELEROMETER就是代表的加速度传感器类型,SENSOR_DELAY_NORMAL是指的传感器灵敏级别,这里使用普通级别就够了,也有更高级别的,如应用在游戏里的就得提高级别。

sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);

准备好了传感器就可以对加速度检测了。这里需要对传感器的监听代码重写,x_value等3个参数就是获取到的手机3个方向的加速度,获取到加速度成功时,需要将数值与设置的临界值比较,如果大于临界值则判断为跳绳跳了一次,同时用Textview显示出来,并播放声音来提醒用户,这样即使手机放在口袋里也能很方便的使用软件。

2)SQLite数据库核心代码

需要创建SQLite数据库时,要用到SQLiteOpen Helper类,新建DatabaseHelper继承SQLiteOpenHelper,创建几个常量DATABASE_NAME代表的是数据库名字,DATABASE_VERSION代表的是数据库版本。这些参数会多次出现,最好事先写好。

private static final String DATABASE_NAME="com.sport_lite.db";//数据库名字

private static final int DATABASE_VERSION=1;//数据库版本

DatabaseHelper类的onCreate方法需要重写来加入创建新的数据表,db.execSQL是数据库命令,create table treadmill代表数据库新建一个叫做treadmill的数据表,后面跟着的都是表内的参数名,这里以text的形式储存下来。

此应用运用了ContentProvider来进行数据共享,主要用来读取文件和读取数据库内容,新建DatabaseProvider继承ContentProvider类,重写onCreate方法,在里面新建Database Helper类,这样就可以将应用的数据库共享获取了。为了方便查询数据,运用UriMatcher来匹配数据表路径,这里只添加两条,分别代表查询数据表和查询其他。

urimatcher = new UriMatcher(UriMatcher.NO_MATCH);

urimatcher.addURI(AUTHORITY,"querytable",QUERY_TABLE);

urimatcher.addURI(AUTHORITY, "queryother",QUERY_OTHER);

3)百度地图API核心代码

需要调用百度地图接口时,首先需要在百度平台上申请秘钥,将其写入AndroidManifest.xml,这样才能在开启GPS时调出百度地图,

<meta-data

android:name="com.baidu.lbsapi.API_KEY"

android:value="********************"/>

在程序中registerLocationListener是注册地址监听,调用setOpenGps来自动开启GPS定位,利用setScanSpan来设置扫描间隔时间。利用百度地图获取到的地址格式LatLng不能直接使用,需要调用百度地图Jar包中的方法DistanceUtil来解析换算。经过换算以后得到移动的距离,最后再以此为依据计算运动消耗等数据。

3 实际测试

准备一款带有传感器与GPS功能的智能Android手机,安装完此应用的软件的APK文件,显示需要网络定位等授权时,点击确认授权,否则程序会无法定位与读写数据。点击进入程序界面,在设置完个人参数后(也可以不设置参数而使用默认值)选择某一项健身运动进入相应的检测界面,将手机放好,做好运动准备。

点击界面上的开始按钮,开始运动(此处以仰卧起坐为例),当做完一个仰卧起坐后,能听到手机发出提示声,并看到界面上的运动数值增加了,完成若干仰卧起坐后点击完成按钮。可保存运动数据,如图4所示。

确保手机GPS功能正常,点击界面上的户外跑步运动,看到自己所在位置的地图,且自动以自己为中心定位好了,移动自己所处位置几十米后,可以看到地图上代表自己的原点更新了位置,切换到旁边的数据页面可以看到跑步距离增加了,如图5所示。

进入查询界面,输入今天的日期与相应的运动项目后可以查到刚刚试验的运动数据,以条形图显示出来,切换界面后也能以详细信息表显示出来。

图4 健身计数示意图

图5 户外跑步地图显示

4 结束语

该目前此软件在某些应用平台上已经登录,可供用户下载,有些许下载量。虽限于推广力度,知名程度等方面限制,使用的用户量增长有些缓慢,不过软件的新颖性,实用性已经可以得到验证。利用这款软件,即使用户独自在家也可以得到属于自己的运动辅助。除开基本的运动检测能力,它的数据显示功能也可以利用展示数据,形成习惯的形式帮助用户坚持健身。在健身知识界面也有这相应的知识辅导,帮助用户科学健身。

现在软件还处于测试版本,或多或少存在一些BUG等待修缮。但我还是相信此软件能为用户带来方便与健康的。

[1]马越,闫庆旭.Android的架构与应用[D].北京:中国地质大学(北京),2008.

[2]张娜,李白萍.Android系统架构研究与应用[D].西安:西安科技大学,2013.

[3]曾健平,邵艳洁.Android系统架构及应用程序开发研究[J].微计算机信息,2011(9):53-57.

[4]吴想想,宋茂强.基于Android平台软件开发方法的研究与应用[D].北京:北京邮电大学,2011.

[5]李文洋,王生生.基于智能手机传感器的行为识别算法研究[D].长春:吉林大学,2014.

[6]陈国良,张言哲,杨洲.一种基于手机传感器自相关分析的计步器实现方法[J].中国惯性技术学报, 2014(6):213-218.

[7]胡龙,王佳昊.基于智能手机的用户行为识别技术研究与应用[D].成都:电子科技大学,2015.

[8]尹邦杰,黄晓莹.浅析Android手机传感器机制及应用设计举例[J].计算机光盘软件与应用,2013(5):86-91.

[9]李晨,梁正友.基于手机加速度传感器的人体监控系统研制[D].南宁:广西大学,2015.

[10]杜国祥,石俊杰.SQLite嵌入式数据库的应用[J].电脑编程技巧与维护,2010(14):33-38.

[11]马获蕾,汤海凤.Android系统中SQLite数据库的研究[J].电脑知识与技术,2013(28):106-114.

[12]黄东,刘蓉.基于SQLite的移动嵌入式数据库同步系统的研究和开发 [D].武汉:华中师范大学,2009.

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

[14]施连敏,盖之华.基于Android的百度地图应用的搭建[J].技术与市场, 2014(12):74-80.

[15]朱根荣.百度地图API应用数例[J].电脑编程技巧与维护, 2013(23):124-131.

The application of Android mobile phone sensor in the field of fitness exercise

HUANG Zhuo-xun1,GUO Xiang-nan2
(1.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China; 2.Fiberhome Telecommunication Technologies Co..LTD,Wuhan 430074, China)

In order to meet the growing public fitness needs,Consider the situation that smart phones have very high penetration rate lately,putting forward an application using Android phone sensors to monitor,norms and manage user's fitness sport.The application develope based on the Android system,the application layer,mainly using mobile phone of the acceleration sensor,orientation sensor,brightness sensor and so on,to manage exercises like sit ups,plate motion,running and so on.The application shows that this method can make the exercise more scientific and precise,it plays a positive role in the fitness of the user.

Android; smart phone; sensor monitoring; fitness exercise

TN87

:A

:1674-6236(2017)15-0045-06

2016-07-23稿件编号:201607164

黄卓勋(1991—),男,湖北武汉人,硕士研究生。研究方向:通信与信息系统、计算机软件。

猜你喜欢

百度数据库软件
禅宗软件
Robust adaptive UKF based on SVR for inertial based integrated navigation
软件对对碰
百度年度热搜榜
数据库
数据库
数据库
数据库
即时通讯软件WhatsApp
百度医生