2016-07-07 6 views
3

を振る検出:Androidは私が左に携帯電話を振るとき、たとえば、多くの場合、私は<code>RIGHT</code>を取得したり、<code>RIGHT</code>と<code>LEFT</code>の両方を取得し、コードの下に、このことにより、正しい電話ブレを検出しようとしているが、そのが正しく動作しないということだ正しい電話が

@Override 
    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) > 200) { 
       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) { 
        Toast.makeText(this, "Right shake detected", Toast.LENGTH_SHORT).show(); 
       } else if (Round(x, 4) < -10.0000) { 
        Toast.makeText(this, "Left shake detected", Toast.LENGTH_SHORT).show(); 
       } 

       last_x = x; 
       last_y = y; 
       last_z = z; 
      } 
     } 
    } 

UPDATED POST:

if (Utils.Round(x, 4) > 8.0000) { 
    //left 
} else if (Utils.Round(x, 4) < -8.0000) { 
    //right 
} else if (z > 9 && z < 10) 
    //down 
else if (z > -10 && z < -9) 
    //up 

答えて

2

は、加速度計がどのように機能するかを考えてみてください。加速度を検出します。携帯電話を右に動かすと右に加速し、一定速度で動くと0になります。あなたの手が止まると、あなたが減速するにつれて負の加速(左への加速)が見られ、停止時に加速が再び0になります。

つまり、動作ごとに常に正負のペアが表示されます。両方を見ると、それぞれがフィルタをトリガするのに十分な強度を持っていたからです。あなたが間違ったものを見ると、それは加速が遅すぎてそれを引き起こすことはできないが、減速は十分に速いことを意味する。あなたはほとんど長い間デバウンシングをしていません。あなたの揺れが減速を検出しないようにするには、200msで始まり、終わる右に移動する必要があります。それほど長くはありません。本当に良い結果が得られるようにするには、DSPアルゴリズムを調べる必要がありますが、これらの概念をすべて踏襲するのは、それ自体の小さな本です。

加速度が鳴ることにも注意してください。加速度計が物理的に動作する仕組みは、体重によって伸ばされた春をイメージします。それは中央値をオーバーシュートし、次に跳ね返り、それを数回行います。その波と後のデータとの干渉は、奇妙な結果をもたらす可能性があります。強力なリングがあなたのフィルターを何回も動かすことさえ可能かもしれません。

また、ここではcurrentTimeMillisを使用しないでください。センサーイベントには時間フィールドがあります。イベントが実際に起こったのはそのときです。システムがビジー状態の場合、イベントが処理されるまでに数百ミリ秒かかることがあります。イベントフィールドでは、処理している時間ではなく、時間を使用します。それは他の問題を残すが、それは少し助けるかもしれない修正。

+0

ok、コードを変更してテストしてください。 –

+0

大変申し訳ございません。ますますコードを変更した後、私のコードを修正できますか?投稿が更新されました。ありがとう –

関連する問題