我試着用加速度計來檢測搖動事件。 我發現當我對手機進行連續搖晃時,加速度的差值 非常穩定。 但是當我旋轉手機時,這個值總是會有很大的改變(通常這個值比「沒有旋轉時晃動」更大)。 我想關注搖動事件,而不是旋轉事件。有沒有辦法解決 的問題?是否有穩定的方法來檢測搖動事件?
,這裏是我的shaing檢測
public void onSensorChanged(SensorEvent event)
{
if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER)
{
nowTime = System.currentTimeMillis();
float x = event.values[SensorManager.DATA_X];
float y = event.values[SensorManager.DATA_Y];
float z = event.values[SensorManager.DATA_Z];
nowAcc = Math.sqrt(x*x+y*y+z*z);
accDiff = Math.abs(nowAcc - preAcc);
timeDiff = (nowTime - preTime);
// try to get the sum of 10 samplings of accDiff
tempAccDiff10 = tempAccDiff9;
tempAccDiff9 = tempAccDiff8;
tempAccDiff8 = tempAccDiff7;
tempAccDiff7 = tempAccDiff6;
tempAccDiff6 = tempAccDiff5;
tempAccDiff5 = tempAccDiff4;
tempAccDiff4 = tempAccDiff3;
tempAccDiff3 = tempAccDiff2;
tempAccDiff2 = tempAccDiff1;
tempAccDiff1 = accDiff;
sumAcc = tempAccDiff10+tempAccDiff9+tempAccDiff8+tempAccDiff7+tempAccDiff6+
tempAccDiff5+tempAccDiff4+tempAccDiff3+tempAccDiff2+tempAccDiff1;
Log.i("SSSS",String.valueOf(sumAcc));
//when I give the phone a big & continuous "shake", it returns
//a value about 30~40, but when I give the phone a small
//"rotation", it returns a value of 80~120
preAcc = nowAcc;
preTime = nowTime;
if (sumAcc>100)
{
SM.unregisterListener(sensorListener, sensor);
}
//123
}
}//end of onSensorChanged();
是有可能忽略使用加速度計旋轉事件代碼? 或者我應該嘗試獲取方向更改並對sumAcc執行一些計算 ?
感謝您的諮詢!我期待的代碼。 我希望我能很快解決這個問題! – Jim31837 2011-06-11 16:32:29
我試圖改變α(高通濾波器常數),但仍然小的旋轉事件導致比大抖動更大的值。其實我使用的是android 2.2 ....我會嘗試線性加速度計,如果我有機會使用2.3設備 – Jim31837 2011-06-11 17:48:55