即使传感器读数没有变化,OnSensorChanged也会调用

时间:2016-02-09 14:43:40

标签: android

我正在使用传感器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的读数发生变化时才会调用此方法?

1 个答案:

答案 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。