计步器(步数计数器)

Har*_*eem 8 android sensormanager pedometer

我正在开发一个计步器Android应用程序来计算所采取的步数,并使用这些步骤计算所覆盖的距离和燃烧的卡路里.我已经按照教程 在Android中创建一个简单的计步器和步数计数器,并且完全像它一样.它检测传感器检测到运动时的步数.

但它有一些问题:

  1. 当我手持设备站在同一个地方,只需移动我的手或给设备一个挺举时,它会检测到更改并增加步数.
  2. 如果我用手中的设备移动得非常慢,它就不会检测到变化.
  3. 如果我跳,那么它会在柜台中添加几个步骤.

我已经从Play商店检查了一些其他应用程序,但他们没有做这种事情.

我已搜索但无法找到适合的解决方案或教程.任何帮助或建议.谢谢

Shu*_*oul 7

通过在类中实现SensorEventListener侦听器并覆盖onSensorChangedonAccuracyChanged两个方法,您可以开始跟踪步骤。

    public class StepActivity extends Activity implements SensorEventListener{
    SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    Sensor sSensor= sensorManager .getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);

    ...

}
Run Code Online (Sandbox Code Playgroud)

现在我们已经初始化了 SensorManager 和 Sensor 并将 Sensor 注册为活动中的侦听器,我们现在需要实现onSensorChanged函数,只要我们注册的 Sensor 发生更改,该函数就会由SensorEvent触发,在我们的例子中是TYPE_STEP_DETECTOR

private long steps = 0;

@Override
public void onSensorChanged(SensorEvent event) {
    Sensor sensor = event.sensor;
    float[] values = event.values;
    int value = -1;

    if (values.length > 0) {
        value = (int) values[0];
    }


    if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
        steps++;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 步数检测器和计步器 API 并非在所有设备中都适用,因为某些设备特别是 Android 9(API 级别 28)及更早版本不支持该 API。 (3认同)

Tuk*_*keV 5

这里的问题是您的实现不够复杂:它仅检查加速度计数据中是否存在尖峰,并假定该尖峰来自某个台阶。它不知道加速度峰值实际上是从哪里来的:它可能还来自您跳动或摇动设备的原因。

那么如何使它更准确呢?好吧,这是一个非常困难的问题,长期以来一直是科学论文的主题。即使是最复杂的健身追踪器(使用机器学习,信号处理和其他统计方法)也很难确定该步骤何时是真实的,何时只是新手或用户正在使用该设备。

幸运的是,Android确实具有自己的内置步数计数器步幅检测器,它们比您的示例中的类还要复杂。

因此,除非您真的想学习信号处理和AI(尽管我对阶跃检测的数据科学知之甚少,但我还是极力推荐这样做),否则建议您使用内置的检测器和计数器。