Android计步器算法原理_加速度传感器实现计步器源码下载
程序员文章站
2022-02-16 11:56:55
...
本Demo主要功能有记录行走的步数、行走的时间、根据录入的体重、步长可以计算出每天行走的历程、消耗的热量、对每天行走的历程进行记录、并给出星级评价、App判断人是否处于行走中、主要从以下几个方面判断
1、人如果走起来了、一般会连续多走几步、因此、如果没有连续4-5个波动、那么就极大可能是干扰
2、人走动的波动、比坐车产生的波动要大、因此可以看波峰波谷的高度、只检测高于某个高度的波峰波谷
3、人的反射神经决定了人快速动的极限、怎么都不可能两步之间小于0.2秒、因此间隔小于0.2秒的波峰波谷直接跳过通过重力加速计感应、重力变化的方向、大小、与正常走路或跑步时的重力变化比对、达到一定相似度时认为是在走路或跑步、实现起来很简单、只要手机有重力感应器就能实现
4、软件记步数的精准度跟用户的补偿以及体重有关、也跟用户设置的传感器的灵敏度有关系、在设置页面可以对相应的参数进行调节、一旦调节结束、可以重新开始、手机QQ早就加入了计算步幅功能、还能和好友PK“炫步”、本项目可以作为一个独立的模块放到合适的项目里面
StepCounterService代码(负责后台的需要长期运行的任务)
public class StepCounterService extends Service { public static Boolean FLAG = false;// 服务运行标志 private SensorManager mSensorManager;// 传感器服务 private StepDetector detector;// 传感器监听对象 private PowerManager mPowerManager;// 电源管理服务 private WakeLock mWakeLock;// 屏幕灯 @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); FLAG = true;// 标记为服务正在运行 // 创建监听器类,实例化监听对象 detector = new StepDetector(this); // 获取传感器的服务,初始化传感器 mSensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE); // 注册传感器,注册监听器 mSensorManager.registerListener(detector, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST); // 电源管理服务 mPowerManager = (PowerManager) this .getSystemService(Context.POWER_SERVICE); mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "S"); mWakeLock.acquire(); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); FLAG = false;// 服务停止 if (detector != null) { mSensorManager.unregisterListener(detector); } if (mWakeLock != null) { mWakeLock.release(); } } }
service负责后台的需要长期运行的任务、计步器服务、运行在后台的服务程序、完成了界面部分的开发后、就可以开发后台的服务类StepService、注册或注销传感器监听器、在手机屏幕状态栏显示通知、与StepActivity进行通信、走过的步数记到哪里了
源代码下载链接: 点击下载Android计步器源码 密码: aia5