我正在使用传感器Sensor.TYPE_ACCELEROMETER
。我正在实施OnSensorChanged()
方法,如下所示:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = event.values;
float[] vector;
vector = event.values.clone();
double normVector =
Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2]);
vector[0] = vector[0] / (float) normVector;
vector[1] = vector[1] / (float) normVector;
vector[2] = vector[2] / (float) normVector;
angle = (int) Math.round(Math.toDegrees(Math.acos(vector[2])));
// do something with angle
}
但是,即使我的设备平放在桌面上,我也会调用此方法,我看到angle
的稳定值(7)。为什么会这样?有没有什么方法可以确保只有在angle
的读数发生变化时才会调用此方法?
答案 0 :(得分:1)
直接来自documentation:
此类传感器测量应用于设备的加速度(Ad)。从概念上讲,它是通过使用以下关系测量应用于传感器本身(Fs)的力来实现的:Ad = - ΣFs/ mass
特别是,重力总是影响测得的加速度:Ad = -g - ΣF/ mass
出于这个原因,当设备坐在桌子上(显然没有加速)时,加速度计读数为g = 9.81 m / s ^ 2
同样,当设备处于自由落体状态并因此以9.81 m / s ^ 2危险地加速到地面时,其加速度计读数为0 m / s ^ 2。