我想弄清楚加速计传感器的工作原理。我有一个由我的MainActivity启动的服务,并将传感器的数据记录在控制台中。我遵循docs建议(消除了传感器读数中的“重力”)。现在,我每次移动设备时都会观察到奇怪的行为。假设它正躺在桌子上,我将它垂直移动,设备顶部朝上,就像那样
正如您从加速度计的读数中看到的那样,只要我将设备保持在上述位置时,读数就会恢复为零。有人可以解释这种行为。为什么X,Y和Z值返回零(假设我持有设备窃取)。
这是我记录数据的服务代码:
@Override
public void onSensorChanged(SensorEvent event) {
// alpha is calculated as t / (t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = (float) 0.8;
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
double x = Math.abs(Math.round(linear_acceleration[0]));
double y = Math.abs(Math.round(linear_acceleration[1]));;
double z = Math.abs(Math.round(linear_acceleration[2]));
Log.d(TAG, "TimeStamp: " + event.timestamp + " X: " + x + " Y: " + y + " Z: " + z);
}