步进探测器使用android加速度计

时间:2014-11-06 14:34:51

标签: android accelerometer sensor

我正在构建一个应用程序来计算使用加速计为Android设备的步骤。(android版本< .4.4)

这样做我用x,y和z计算重力(G)。如果G的值大于STEP_THRESHOLD,则表示已经发生了一个步骤:

    @Override
public void onSensorChanged(SensorEvent event) {
    synchronized (this) {

        if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
            return;
        }

        final float x = event.values[0];
        final float y = event.values[1];
        final float z = event.values[2];
        final float g = Math.abs((x * x + y * y + z * z) / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH));

        if (g > StepUtil.GRAVITY_THRESHOLD) {
            /*
            * check step times and other checkings
            */
             .
             .
             .
            stepCounter++;
        }

    }
}

问题是: 由于每个设备的加速计硬件不同,因此STEP_THRESHOLD没有一定的值。 似乎每个设备的STEP_THRESHOLD值应该是动态的! 是否有根据加速度计精度更改STEP_THRESHOLD值的标准?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

  

由于加速度计硬件在每个设备中都有所不同,因此STEP_THRESHOLD没有一定的值

话虽如此,您的应用显然缺少的是简单的校准,这将允许您的用户在其设备上设置阈值级别。告诉他们做几个步骤,取传感器值,取平均值/中位数/平均值(无论什么对你有用),你得到了STEP_THRESHOLD。您甚至可以将此值发送回服务器,这样您就可以构建一种数据库,并且可以使用更多/更少的通用起始值STEP_AVERAGE。