计步器作为算法功能模块, 本应该和业务模块分离, 解耦合. 这样也可以更加专注于算法的升级. 我来简述一下计步器算法的实现原理, 给大家一些启发.

1. 算法

对于所有计步器而言, 早期必然是使用加速度传感器(Accelerometer Sensor)测量步数, 随后谷歌推出计步传感器(Step Counter Sensor), 由硬件或系统计算步数的变化, 使得算法简化. 有些手机, 未提供计步传感器; 有些手机, 在待机过程中关闭计步传感器.

简单介绍一下实现算法.
1. 加速度传感器(Accelerometer Sensor):
算法根据加速度传感器空间位置(XYZ轴)的变化, 绘制空间曲线, 根据两次波峰波谷之间的时间间隔, 判断步行或其他状态. 在短时间内出现连续波峰, 即为步行; 波峰出现的时间间隔较长, 则认为停止行走. 同时, 屏蔽轻微与初始扰动, 提升准确性; 通过调整参数, 适配不同手机的传感器差异, 提升鲁棒性.
2. 计步传感器(Step Counter Sensor):
算法读取计步传感器的数值, 与本地缓存数值匹配, 判断步数的增加与否. 在屏幕关闭时, 启动BatchMode模式, 配合协处理器, 延迟获取数值, 节约电量. 当计步传感器停止时(有些手机在屏幕关闭时会停止部分传感器), 自适应切换加速度传感器, 启动时, 再次切换计步传感器.
3. 自适应性(Self-Adaption):
根据系统参数, 算法优先选择计步传感器, 当计步传感器无法使用时, 选择加速度传感器.

2. 使用方式

本算法已经生成SDK包, 可以独立使用.
首先初始化计步器管理器(PedometerManager), 传入上下文(Context)和步数回调, 当步数增加时, 会自动调用回调. 应用根据UI界面样式, 使用步数. 其次启动步数服务(PedometerService), 服务根据系统状态变化自启动, 确保实时监控步数.

        /*** 使用方式, 传入Context和步数回调, 当步数增加时会自动调用回调, 添加StepRate参数, 实现锁屏计步.*/PedometerManager.getInstance().init(MainActivity.this.getApplicationContext(),new StepCallback() {@Override public void addStep() {// 步频(StepRate)参数, 亮屏默认是1, 锁屏根自适应调整mStep += PedometerManager.getStepRate();mTvStep.setText(String.valueOf(mStep + "步"));Log.e(TAG, "Step: " + mStep);}});/*** 初始时启动服务, 服务会自动保持连接, 并处理系统异常.*/startService(new Intent(this, PedometerService.class));

项目最外层build.gradle, 添加Maven库的地址, 传入账号和密码.

allprojects {repositories {mavenCentral()maven {url "http://maven.chunyu.mobi/content/groups/public/"credentials {username maven_userpassword maven_password}}}repositories {jcenter()}
}

在项目中添加依赖, 即[GROUP_ID]:[ARTIFACT_ID]:[VERSION].

compile 'me.chunyu.android:pedometer:0.3.0'

3. 版本迭代

0.1.0:

初始化项目, 提供简单的计步功能.

0.2.0:

  1. 当锁屏时, 加速度传感器频率降低, 导致无法计步. 修改算法实现锁屏低频计步.
  2. 使用时, 添加步频(StepRate)参数, 亮屏默认是1, 锁屏根据传感器频率自适应调整.

0.3.0:

添加上传应用激活信息功能.

外部合作:
本算法目前仅在公司内部使用,
如需合作请联系春雨医生官网的推广合作(xiaoyao@chunyu.me).

OK, That’s all.

计步器算法简述和模块使用相关推荐

  1. 路径规划五种算法简述及对比

    以下是本人在学习路径规划过程中的一些总结,借着机会写了一下,有不妥之处欢迎批评指正,谢谢. 路径规划部分在无人车架构体系当中分属控制或决策部分,如图1,是实现无人化驾驶的关键技术之一.路径规划模块性能 ...

  2. # Pedometer 计步器算法简介

    Pedometer 计步器算法简介 以Android 6.0 M 为例,它为Pedometer计步器(以下简称Pedo)提供了两颗虚拟传感器(以下用sensor):Step Counter和Step ...

  3. C/C++程序基础 (九)排序算法简述

    排序算法 算法复杂度 算法简述 插入排序 N2 前方有序,依次将后方无序数据插入前方合适位置. 冒泡排序 N2 前方有序,从后方两两比较,将最小泡冒到前方. 选择排序 N2 前方有序,从后方选择最小的 ...

  4. 一位同学想通过用计算机编程解决韩信点兵,高中信息技术《算法与程序设计模块》练习题...

    新课标高中信息技术<算法与程序设计模块>练习题 一.单选题(每题2分,共40分) 1.四川汶川地震过后,要对各个单位捐款救灾情况进行分组制表,并进行积分排序,一般使用的专业电子处理软件是( ...

  5. JavaScript数据结构和算法简述——数组

    为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...

  6. JavaScript数据结构和算法简述——前言

    为什么要使用数据结构和算法(程序=数据结构+算法)         数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.包括数组.链表.栈.二叉树.哈希表等.        算法是对这些结构中 ...

  7. 一种基于陀螺仪传感器的准确计步器算法

    一种基于陀螺仪传感器的准确计步器算法 A Gyroscope Based Accurate Pedometer Algorithm 作者:Sampath Jayalath.Nimsiri Abhaya ...

  8. Android计步器算法实现(2)

    Android计步器算法实现(2) 前言 算法实现的意义 现实原因 优缺点 算法原理 运动状态判断 计步原理 步长计算原理 Java实现 补充 观测点的作用 数据的存放方式 前言 在之前我也写过两篇关 ...

  9. Android计步器算法实现

    最近在研究惯性导航和其他导航算法的融合,顺手把计步.步长等一堆算法写成类了,舒服~ 这篇文章我不会具体的讲解实现原理,有兴趣研究的朋友直接看我写的计步算法实现和步长计算. Android系统有自带的计 ...

最新文章

  1. 【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 | rt_priority 实时优先级 )
  2. fullyRelease
  3. c#foreach循环_C#| 使用foreach循环打印整数数组
  4. 转:PriorityQueue
  5. MyBatis当多个请求参数时处理方式
  6. 美国62%智能音箱用户都使用了语音购物,连鹦鹉都忍不住了
  7. 【bayes】贝叶斯估计与最大似然估计
  8. verilog之按键消抖的理解
  9. ASP.NET MVC应用中一个诡异错误的处理
  10. steamcom启动服务:443端口被占用,请关闭占用该端口的进程后再点击启动服务!
  11. 【CSDN|每日一练】走楼梯
  12. 10系统更新后计算机不见,你好!我的电脑一不小心升级到win10以后桌面上的资料都不见了?? 爱问知识人...
  13. 新拉下来的vue项目怎么跑起来?
  14. hdu4215 Moles
  15. 夏天来了,西瓜配橙汁,来点小清新风格
  16. 用户登录 验证数据库
  17. c语言程序设计基础程序改错,c语言程序设计改错信息.docx
  18. 数学建模——规划模型
  19. Mac book笔记本输入法错乱
  20. java爬取网易云歌单_爬虫爬取网易云歌单

热门文章

  1. HTML文字左侧留白,DIV CSS padding内补白(内边距)left right top bottom
  2. 数学黑洞(二)任何数都逃不出的西西弗斯黑洞
  3. 如何进入docker系统
  4. iOS8 苹果自带的毛玻璃效果
  5. [提醒]曾经犯的谜之错误
  6. 谈小米内忧外患的困境
  7. 通过echarts绘制双十一销量实时统计图表
  8. 欲望无限--《贝奥武夫》给我们的启示
  9. c语言linux系统时间,【整理】C语言设置Linux系统时间 | 勤奋的小青蛙
  10. 零知识证明 - 从QSP到QAP