Acelerometer:摇晃手机检测

问题描述:

我一直在使用这种代码Android: I want to shake it来实现震动运动检测器。但实际上,当我在智能手机上运行它时,它什么都不做。我尝试使用断点检查,并且它从不输入if(mAccel> 12)。 我试图动摇它真的很难,但仍然不承认。我认为,这需要一定的权限,我加入这一行的体现:Acelerometer:摇晃手机检测

<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" /> 

我试着在银河S3和万普拉斯之一,我忘了什么东西?

EspecificExerciseActivity.java

public class EspecificoExercicio extends Activity { 

    private ArrayList<Exercicio> listaExercicios; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_especifico_exercicio); 

     /* do this in onCreate */ 
     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
     mAccel = 0.00f; 
     mAccelCurrent = SensorManager.GRAVITY_EARTH; 
     mAccelLast = SensorManager.GRAVITY_EARTH; 

     if (mAccel > 12) { 
      Toast toast1 = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG); 
      toast1.show(); 
     } 
    } 

     /* put this into your activity class */ 
     private SensorManager mSensorManager; 
     private float mAccel; // acceleration apart from gravity 
     private float mAccelCurrent; // current acceleration including gravity 
     private float mAccelLast; // last acceleration including gravity 

     private final SensorEventListener mSensorListener = new SensorEventListener() { 

     public void onSensorChanged(SensorEvent se) { 
      float x = se.values[0]; 
      float y = se.values[1]; 
      float z = se.values[2]; 
      mAccelLast = mAccelCurrent; 
      mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z)); 
      float delta = mAccelCurrent - mAccelLast; 
      mAccel = mAccel * 0.9f + delta; // perform low-cut filter 
     } 

     public void onAccuracyChanged(Sensor sensor, int accuracy) { 
      if (mAccel > 4) { 
       Toast toast1 = Toast.makeText(getApplicationContext(), "DevSSDAASSADA", Toast.LENGTH_LONG); 
       toast1.show(); 
      } 
     } 


     }; 

     @Override 
     protected void onResume() { 
     super.onResume(); 
     mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 

     } 

     @Override 
     protected void onPause() { 
     mSensorManager.unregisterListener(mSensorListener); 
     super.onPause(); 
     } 

} 

你检查你的if (mAccel > 12)里面的onCreate()。将支票移至onSensorChanged()

+0

还是一样@Sleelight – 2015-01-04 14:02:34

+0

如果你把onSensorChanged()断点,你到达那里? – Steelight 2015-01-04 14:05:14

+0

yeas @Steelight,但它没有输入if。我应该改变价值,而不是12,减少? – 2015-01-04 14:12:49