本文的合集已经编著成书,高级Android开发强化实战,欢迎各位读友的建议和指导。在京东即可购买:https://item.jd.com/12385680.html
计步器作为算法功能模块, 与业务模块分离, 解耦合. 这样也可以更加专注于算法的升级. 最新功能, 具体参考线上产品: 春雨医生, 春雨计步器. 我来简述一下计步器算法的实现原理, 给大家一些启发.
1. 算法
对于所有计步器而言, 早期必然是使用加速度传感器(Accelerometer Sensor)测量步数, 随后谷歌推出计步传感器(Step Counter Sensor), 由硬件或系统计算步数的变化, 使得算法简化. 有些手机, 未提供计步传感器; 有些手机, 在待机过程中关闭计步传感器.
简单介绍一下算法原理:
-
加速度传感器(Accelerometer Sensor):
算法根据加速度传感器空间位置(XYZ轴)的变化, 绘制空间曲线, 根据两次波峰波谷之间的时间间隔, 判断步行或其他状态. 在短时间内出现连续波峰, 即为步行; 波峰出现的时间间隔较长, 则认为停止行走. 同时, 屏蔽轻微与初始扰动, 提升准确性; 通过调整参数, 适配不同手机的传感器差异, 提升鲁棒性. -
计步传感器(Step Counter Sensor):
算法读取计步传感器的数值, 与本地缓存数值匹配, 判断步数的增加与否. 在屏幕关闭时, 启动BatchMode模式, 配合协处理器, 延迟获取数值, 节约电量. 当计步传感器停止时(有些手机在屏幕关闭时会停止部分传感器), 自适应切换加速度传感器, 启动时, 再次切换计步传感器. -
自适应性(Self-Adaption):
根据系统状态, 优先选择计步传感器, 当计步传感器无法使用时, 选择加速度传感器.
关于服务保活:
- 计步服务单独使用一个进程, 保证内存较少, 低优先级被杀死.
- 设置AlarmManager定时器, 定时检测服务状态, 启动服务.
- 接收常规系统广播, 如网络, 电量, 充电等, 检查并启动服务.
- 将服务设置为前台服务, 提高进程优先级, 避免杀死.
关于反作弊:
已经根据手机状态, 添加反作弊功能, 防止恶意刷步.
关于省电:
在服务中已经使用多种电量优化措施, 内部测试, 电量消耗远低于竞品.
提供开关, 自行控制唤醒锁, 默认不使用唤醒锁.
2. 示例
计步算法与服务已经集成至独立Maven库或AAR库, 使用Intent发送计算后的数据(步数与运动时间), 供主App使用和展示.
3. 模块
算法库使用模块化开发.
4. 合作
本算法目前仅在公司内部使用, 如需合作, 直接站内私信我.
OK, That's all. Enjoy it!