美文网首页
手机计步功能开发所遇到的问题

手机计步功能开发所遇到的问题

作者: 牛排酸梅汤 | 来源:发表于2018-10-04 00:54 被阅读0次

最近做健康相关的项目,需要实现计步和睡眠的统计。本文主要记录计步功能实现过程和问题以及部分问题解决方案。计步处理主要有2种方式:一种取第三方的计步数据(例如小米运动,三星健康,华为运动健康等);一种是取手机自带的传感器,注册监听器,统计和计算步数。第一种方式见(三方步数数据传递图),计步数据准确性在匹配的系统上都很准(小米运动对应小米手机,华为对应华为手机),毕竟亲生的。本文主要记录第二种实现和bug修复。

三方步数数据传递图

一、功能实现

功能实现图

android系统中,所有传感器都是通过SensorManager获取的,要获取计步传感器和加速度传感器可以使用以下代码

//获取传感器管理者

SensorManager sm = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);

//获取计步传感器,步数能累加

Sensor counter = sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);

//获取加速度传感器,步数不能累加

Sensor detector = sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);

//传感器变化监听器

SensorEventListener sensorEventListener = new SensorEventListener() {

@Override

public void onSensorChanged(SensorEvent event) {

//传感器变化后回调的参数封装的对象,values数组存储传感器变化后的数据

//计步传感器 count是上次开机到当前记录的总的震动数 例如 星期一开机 到星期四 总共走了5万步,此时回调就会是 count = 50000.0 float count = event.values[0];

//加速度传感器 detector 表示单次震动,一般值是1.0 ,但不能说明就是完成一次步行,还要取出 values[1] values[2]进行模型计算,具体算法可以网上查询也可以看我github上传的demo

float detector = event.values[0];

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) { }

};

//第三个参数表示,监听器回调频率

sm.registerListener(sensorEventListener,counter,SENSOR_DELAY_FASTEST);

从回调结果我们发现加速度传感器只能统计单次,十分依赖后台保活运行。而计步传感器通过记录差值计算步数,而不依赖程序保活。一般android5.0以上手机都会附带计步传感器,在低版本或者低配手机上则使用使用加速度计步。

二、开发问题及解决方案

    1)计步传感器 回调步数某些机型上会回落,导致bug    -------->     计算差值时提高变动判断 只有上次缓存步数 - 回调步数小于100才算传感器被清零;检测开机广播,主动清零缓存步数。

     2}计步传感器 跨天步数计算----------->  增加保活机制;不保活时间段步数,如果跨天记录到前一天;设置零点闹钟进行分割(效果不好)

     3)小米MIUI 和华为EMUI系统管理电池,导致在熄屏状态下传感器数据变动无法检测(app回调事件只能拿到熄屏时的回调数据) ------->引导用户设置 电池管理和应用优化白名单

    4)某些手机计步传感器会出现拿不到回调,手机重启后恢复正常 --------->应该是手机传感器问题,暂提醒用户重启

相关文章

  • 手机计步功能开发所遇到的问题

    最近做健康相关的项目,需要实现计步和睡眠的统计。本文主要记录计步功能实现过程和问题以及部分问题解决方案。计步处理主...

  • 趣步是什么?怎么玩转趣步?

    1.什么是趣步? 趣步是一款以运动健康为理念开发的手机app计步软件.安装到手机就可以为你计步!就和如今的微信美团...

  • Android计步模块优化(今日步数)

    最近在项目中研究计步模块,主要功能记录当天步数,类似微信运动,支付宝计步,咕咚今日步数。开发之前的调研工作,搜遍b...

  • 增加功能需慎重

    最近在产品的最新版本中增加了计步功能,在这段时间,我们遇到了不少的问题,也看到了这个功能的不少缺陷。我不禁开始思考...

  • apicloud新手总结

    使用apicloud结合vue进行app开发。这里只总结我所遇到并且已解决的问题方法。 1、手机白屏问题:分清楚网...

  • 开源控件HooCircleProgressView

    开源控件HooCircleProgressView 工作中开发健康走步的功能,需要用到一个环形计步的控件,看了几个...

  • 微信朋友圈你为什么给我点赞

    自从买了新手机,有了计步功能,就打开了微信运动这个功能。开始觉得挺兴奋每天看看运动了多少,朋友们走了多少步,感叹科...

  • 2019-07-23

    手机到底是怎样计算咱们每天行走的步数的? 现在的手机基本上都有APP运动计步功能,比如常见的微信运动,还有其他一些...

  • Java大杂烩之【使用enum转换所需常量】

    Enum:枚举类型。 Enum功能(本人实际开发中遇到的一个功能,其他功能不太清楚,有待一步一步探讨):在数据库查...

  • 弱网测试方案探索

    最近在搞一个智能穿戴项目。手环手表等智能穿戴项目中最核心的功能是运动计步功能。 计步功能的业务逻辑是主要流程是通过...

网友评论

      本文标题:手机计步功能开发所遇到的问题

      本文链接:https://www.haomeiwen.com/subject/fymtaftx.html