1

デバイスを振ると、sensorevenetlistner を使用してインテントがトリガーされます。問題は、インテントが発火している小さな揺れだけですが、デバイスを 3 回または一定回数振ったときにのみ発火させたいと考えています。

private void getAccelerometer(SensorEvent event) {
    float[] values = event.values;
    // Movement
    float x = values[0];
    float y = values[1];
    float z = values[2];

    float accelationSquareRoot = (x * x + y * y + z * z)
        / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
    long actualTime = System.currentTimeMillis();
    if (accelationSquareRoot >= 2) //
    {
      if (actualTime - lastUpdate < 200) {
        return;
      }
      lastUpdate = actualTime;
      //Toast.makeText(this, "Device was shuffed", Toast.LENGTH_SHORT)
         // .show();


      Intent myIntent = new Intent(SensorTestActivity.this, passwordActivity.class);
      startActivity(myIntent);
  }
};

以下は私の完全なコードです

http://pastebin.com/1WtHYH6z

私は打たれました..どんな提案でも大歓迎です。

4

2 に答える 2

0

Goot の回答を考慮すると、プログラムは次のようになります。

int count = 0;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity

private void getAccelerometer(SensorEvent event) {
    float[] values = event.values;
    // Movement
    float x = values[0];
    float y = values[1];
    float z = 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

    //adjust the mAccel > certain_value (adjust this to change the sensitivity of the       
        //shake) 
    if(mAccel > 5) {
    Toast.makeText(SensorTestActivity.this, "Device is shaking!",      
            Toast.LENGTH_SHORT).show();

        count++;
        if(count >= 3) {
            Intent myIntent = new Intent(SensorTestActivity.this,    
                passwordActivity.class);
            startActivity(myIntent);
            count = 0; //if you want to reset the counter after performing the action
        }
    }
}
于 2012-11-16T12:20:01.720 に答える