我正在构建一个应用程序来计算使用加速计为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值的标准?
任何帮助将不胜感激。
答案 0 :(得分:3)
由于加速度计硬件在每个设备中都有所不同,因此STEP_THRESHOLD没有一定的值
话虽如此,您的应用显然缺少的是简单的校准,这将允许您的用户在其设备上设置阈值级别。告诉他们做几个步骤,取传感器值,取平均值/中位数/平均值(无论什么对你有用),你得到了STEP_THRESHOLD。您甚至可以将此值发送回服务器,这样您就可以构建一种数据库,并且可以使用更多/更少的通用起始值STEP_AVERAGE。