Detectar sacudidas de dispositivo en la dirección izquierda o derecha en android?

Quiero utilizar SensorManager, pero para detectar Shaking de dispositivo en la dirección izquierda o derecha, no sé cómo detectar sacudidas de dispositivo está en la dirección correcta o en la dirección izquierda. Tengo la siguiente pregunta:

  • ¿Cómo implementar la sacudida del dispositivo con SensorManager?

  • ¿Cómo puedo detectar en qué dirección se sacude el dispositivo?

2 Solutions collect form web for “Detectar sacudidas de dispositivo en la dirección izquierda o derecha en android?”

He intentado este y he encontrado una manera de hacer esto. El método es, estoy monitoreando el valor del eje X. Si el umbral excede el límite y el valor X excede el valor que estamos dando, entonces obtendremos un mensaje Toast en el que sacudimos el teléfono ya sea a la izquierda oa la derecha. He intentado de esta manera:

public class ShakeActivity extends Activity implements SensorListener { // For shake motion detection. private SensorManager sensorMgr; private long lastUpdate = -1; private float x, y, z; private float last_x, last_y, last_z; private static final int SHAKE_THRESHOLD = 800; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // start motion detection sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); boolean accelSupported = sensorMgr.registerListener(this, SensorManager.SENSOR_ACCELEROMETER, SensorManager.SENSOR_DELAY_GAME); if (!accelSupported) { // on accelerometer on this device sensorMgr.unregisterListener(this, SensorManager.SENSOR_ACCELEROMETER); } } protected void onPause() { if (sensorMgr != null) { sensorMgr.unregisterListener(this, SensorManager.SENSOR_ACCELEROMETER); sensorMgr = null; } super.onPause(); } public void onAccuracyChanged(int arg0, int arg1) { // TODO Auto-generated method stub } public void onSensorChanged(int sensor, float[] values) { if (sensor == SensorManager.SENSOR_ACCELEROMETER) { long curTime = System.currentTimeMillis(); // only allow one update every 100ms. if ((curTime - lastUpdate) > 100) { long diffTime = (curTime - lastUpdate); lastUpdate = curTime; x = values[SensorManager.DATA_X]; y = values[SensorManager.DATA_Y]; z = values[SensorManager.DATA_Z]; if(Round(x,4)>10.0000){ Log.d("sensor", "X Right axis: " + x); Toast.makeText(this, "Right shake detected", Toast.LENGTH_SHORT).show(); } else if(Round(x,4)<-10.0000){ Log.d("sensor", "X Left axis: " + x); Toast.makeText(this, "Left shake detected", Toast.LENGTH_SHORT).show(); } float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000; // Log.d("sensor", "diff: " + diffTime + " - speed: " + speed); if (speed > SHAKE_THRESHOLD) { //Log.d("sensor", "shake detected w/ speed: " + speed); //Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show(); } last_x = x; last_y = y; last_z = z; } } } public static float Round(float Rval, int Rpl) { float p = (float)Math.pow(10,Rpl); Rval = Rval * p; float tmp = Math.round(Rval); return (float)tmp/p; } } 

Se ha pedido (y resuelto) aquí mismo .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.