最近写了一款安卓应用——运动追踪(SportsTracker)。
下面就来介绍下这款应用以及设计到的部分技术。
一、应用简介
现在手机等移动终端已经成为了人们随身必备装备了,所以基于此,我们可以通过手机中的传感器来分析用户的运动状态,这款运动追踪是根据这一特点设计的。
市面上也有很多类似的应用,但是这款应用有其自身的特点,该应用不使用GPS分析运动状态,这样耗电量就不会很高,也不用用户去手动点击开始、结束按钮来开始结束运动。
使用该应用,用户不用任何操作,运动追踪就会每天统计用户行走或是跑步的步数,计算出运动的距离、时间、速度、以及消耗的卡路里等,并以图表的形式展现给用户。
该应用极其简洁,实用,这里截出几张图:
二、应用技术
1、主要用到的技术
Activity/Fragment,这不用说,用户看到的界面就是Activity,Activity里嵌入Fragment
Service,后台会一直运行一个运动追踪服务
BroadcastReceiver
Intent
DB(Sqlite),保存用户运动追踪数据
Notification,运动追踪提醒
AChartEngine,以图表的方式展示用户运动数据
传感器,接收用户运动变化
其他
2、程序细节
TheApp:(需要在AndroidManifest.xml里配置<application android:name=".TheApp")
全局唯一的application实例,这里可以全局性的初始化动作,而不是放在Activity或者Service里实现。运动追踪主要是做全局数据的初始化和全局BroadcastReceiver的处理
MainActivity:
显示用户界面,运动追踪内嵌了Fragment所以,显示用户运动数据是在Fragment里实现的,MainActivity里主要用来保存Activity用到的数据,相当于Fragment的容器。
Service:
后台注册运动传感器,追踪和保存用户数据,常驻后台,即使Activity一个没有,也在后台运行,所以用户不用手动去开始、结束运动,运动追踪会自动运行统计用户的运动数据,这样非常方便。
Notification:
通知是一直在通知栏显示的,使用RemoteVies自定义通知,可以和用户进行简单的互动,比如开始、暂停追踪,用户可以取消通知栏。
其他,就是完善运动追踪的小细节了,这里就不多说了。
SportsDetector:
运动检测,用于检测用户的运动状态,比如走路或是跑步,这里的算法就不详细说了,这里我就讲一下如何过滤干扰。
因为传感器会不停的有数据反馈,不可能每来一次传感器数据就认为是一次运动,这肯定是不对的,所以我们就要有相关的过滤分析功能。
我们需要考虑:
a)、考虑传感器传来的数据如何量化成运动数据,
b)、考虑过滤掉小范围波动,
c)、考虑运动的方向判断,
d)、考虑运动是一个持续性的过程,
e)、考虑一次运动的开始和结束,比如走一步或者跑一步的开始和结束过程,
f )、考虑人类的运动极限,远低于正常运动和超过运动极限的数据,应该算是非正常运动。
欢迎使用运动追踪
谢谢