He intentado detectar un evento de sacudida con el acelerómetro. He descubierto que cuando doy un batido continuo oa al teléfono, la diferencia de valor de la aceleración es bastante estable. Pero cuando gira el teléfono, siempre hay un gran cambio en el valor (el valor es por lo general más grande que "sacudir sin rotación"). Quiero centrarme en el evento de agitación, no en el evento de rotación. ¿Hay alguna manera de resolver el problema?¿Existe una forma estable de detectar el evento de temblor?
aquí es mi código para que compartiran con nosotros detección
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();
es posible descuidar el caso de la rotación utilizando el acelerómetro? O debería tratar de conseguir el cambio de orientación y hacer algunos cálculos en el Sumacc?
Gracias por su consejo! Estoy esperando el código. ¡Espero poder resolver este problema pronto! – Jim31837
He intentado cambiar el alfa (constante de filtro de paso alto), pero un pequeño evento de rotación resulta en un valor mayor que un gran temblor. En realidad, estoy usando Android 2.2. Probaré el medidor de aceleración lineal si tengo la oportunidad de usar 2.3 dispositivos. – Jim31837