2013-02-19 25 views
0

當我運行我的代碼時,加速度計返回的值似乎是隨機的,即使我拿起設備並旋轉它,似乎也沒有任何戲劇性數值變化或明顯指示設備已從靜止位置變爲移動位置。我從谷歌網站複製了代碼。基本上我試圖看看設備是否完全從靜止位置移動。解決方案應該在Android 2.2和工作上面,如果可能的:當設備處於靜止狀態時,加速度計給出隨機值

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST); 

float[] gravity = new float[3]; 

@Override 
public void onSensorChanged(SensorEvent event) 
{ 
    try 
    { 
    final float alpha = 0.8f; 
    float[] linear_acceleration = new float[3]; 

    // Isolate the force of gravity with the low-pass filter. 
    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]; 

    // Remove the gravity contribution with the high-pass filter. 
    linear_acceleration[0] = event.values[0] - gravity[0]; 
    linear_acceleration[1] = event.values[1] - gravity[1]; 
    linear_acceleration[2] = event.values[2] - gravity[2]; 
    } 
    catch (Exception ex) 
    { 
    } 
} 
+0

重力應該是一個類的方法不可變的領域! – 2013-02-19 08:44:42

+0

沒有什麼區別。事件中的原始值在休息和移動之間沒有任何顯着變化。我雖然刪除了重力數組。 – AndroidDev 2013-02-19 09:09:21

回答

1

當你從documentation應對的解決方案與理解做。
gravity由於您需要低通濾波器的存儲狀態,因此必須是該類的一個字段。 gravity保存平均值加速度計的值,快速變化是你的線性加速度。

0
  1. 你試過Sensor.TYPE_LINEAR_ACCELERATION?這個傳感器 返回排除重力的加速力,並且您不需要 計算它
  2. 傳感器過於敏感,並且存在大量噪音。獲得0,0,0值幾乎是不可能的。您需要排除小值。
相關問題