2016-02-09 74 views
2

我使用傳感器作爲Sensor.TYPE_ACCELEROMETER。我實現OnSensorChanged()方法如下:即使傳感器讀數沒有變化,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

直從documentation

的這種類型的措施的加速度施加到裝置(AD)的傳感器。在概念上,它通過使用以下關係測量施加到傳感器本身的力(Fs)來實現:Ad =-ΣFs/質量特別是,重力總是影響測得的加速度:Ad = -g - ΣF/質譜

出於這個原因,當該裝置被放在桌子(和顯然不是加速)時,加速度計讀出g的大小=9.81米/秒^ 2

類似地,設備當處於自由落體狀態,因此危險地以9.81m/s^2的速度加速到地面,其加速度計讀數爲0m/s^2。

相關問題