计步器算法简述和模块使用
来源:互联网 发布:模板支撑计算软件 编辑:程序博客网 时间:2024/06/05 01:44
计步器作为算法功能模块, 本应该和业务模块分离, 解耦合. 这样也可以更加专注于算法的升级. 我来简述一下计步器算法的实现原理, 给大家一些启发.
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_user password maven_password } } } repositories { jcenter() }}
在项目中添加依赖, 即[GROUP_ID]:[ARTIFACT_ID]:[VERSION]
.
compile 'me.chunyu.android:pedometer:0.3.0'
3. 版本迭代
0.1.0:
初始化项目, 提供简单的计步功能.
0.2.0:
- 当锁屏时, 加速度传感器频率降低, 导致无法计步. 修改算法实现锁屏低频计步.
- 使用时, 添加步频(StepRate)参数, 亮屏默认是1, 锁屏根据传感器频率自适应调整.
0.3.0:
添加上传应用激活信息功能.
外部合作:
本算法目前仅在公司内部使用,
如需合作请联系春雨医生官网的推广合作(xiaoyao@chunyu.me).
OK, That’s all.
- 计步器算法简述和模块使用
- MD5算法使用简述
- dblink 简述和使用
- Boltztrap安装和使用简述
- 文本指纹算法和系统简述
- 算法简述
- Drupal常用模块简述
- Drupal常用模块简述
- Spring框架模块简述
- Keras模块简述
- elasticsearch之索引模块简述
- 模块的使用和自定义模块
- ansible服务模块和组模块使用
- Python:使用模块和安装模块:
- RSA算法简述
- DES算法简述
- bsp分割算法简述
- MMSeg分词算法简述
- 关于Scanner的位置问题
- 我的目标是睁十个小时的眼干九个小时的活,期望出十一个小时的效果,多挣会眼享受慢节奏。如果干十二个小时,一定要期望它要让它出十五个小时的效果,决不能出十个小时的效果,那就有点白费时间啦
- Codeforces 602B
- Java中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具
- [leetcode] 131. Palindrome Partitioning 解题报告
- 计步器算法简述和模块使用
- 上传Apk至测试服务器
- 框架和类库的区别
- 发送手机物理标识请求
- activity生命周期完整版
- 泛型的内部原理:类型擦除以及类型擦除带来的问题
- 欢迎使用CSDN-markdown编辑器
- Java菜鸟入门(20) Producer Consumer经典代码
- Duilib库中的点九图使用(解决控件贴图拉伸圆角变形问题等)