2016-04-11 8 views
-1

モバイルが倒れたときに検出するアンドロイドプロジェクトを作成しています。アプリでどのセンサーを使用すればいいのか教えてもらえますか?加速度センサーがこの種類の目的で使用することはわかっていますが、私の手と私は携帯電話が落ちるときにのみ乾杯をしたい。ここ が私のコードです:モバイルが落ちたときにトーストをどうやって得るのか教えてもらえますか?

int count = 1; 
    private boolean init; 
    private Sensor mySensor; 
    private SensorManager SM; 
    private float x1, x2, x3; 
    private static final float ERROR = (float) 7.0; 
    private static final float SHAKE_THRESHOLD = 15.00f; // m/S**2 
    private static final int MIN_TIME_BETWEEN_SHAKES_MILLISECS = 1000; 
    private long mLastShakeTime; 
     public void onSensorChanged(SensorEvent event) { 

      if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 

       long curTime = System.currentTimeMillis(); 
       if ((curTime - mLastShakeTime) > MIN_TIME_BETWEEN_SHAKES_MILLISECS) { 

        float x = event.values[0]; 
        float y = event.values[1]; 
        float z = event.values[2]; 

        double acceleration = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2) 
          + Math.pow(z, 2)) 
          - SensorManager.GRAVITY_EARTH; 
        Log.d("mySensor", "Acceleration is " + acceleration + "m/s^2"); 

        if (acceleration > SHAKE_THRESHOLD) { 
         mLastShakeTime = curTime; 
         Toast.makeText(getApplicationContext(), "FALL DETECTED", 
           Toast.LENGTH_LONG).show(); 
    } } }} 
+0

実際にはどうなりますか?あなたは秋を検出しますが、揺れも検出しますか?あなたがそれを振ると、あなたがそれを落としたときに(私はそうではないが十分に硬い表面であると仮定します)、Log.dにどの値を入れますか? – CloudWalker

+0

@CloudWalker私は揺れて負の時に正の値を示します。オンシェイク: 04-14 09:46:53.206 24230-24230 /? D/mySensor:加速は12.087330033651629m/s^2秋に:04-14 09:46:53.606 24230-24230 /? E /秒:0.0 04-14 09:46:53.606 24230-24230 /? D/mySensor:アクセラレーションは-7.812465535485355m/s^2 – Abhishek

+0

MIN_TIME_BETWEEN_SHAKES_MILLISECSは使用しないでください。あなたの手(またはポケット、またはテーブルの上)に電話があると想像してください。いくつかのアクションは、小さなスパイクを振り下ろしてから、1秒未満の間無音状態になり、地面にぶつかります(1つは大きなスパイクです)。次に2〜2回は何もしません(所有者がそれを選ぶまで)。最大のスパイクとその時間を記録しているすべてのイベントを調べてから、シーケンスに従うかどうかを確認する必要があります:揺れ(小さなスパイク)、短時間の無重力、大きなスパイク、秒。 – CloudWalker

答えて

0

こんにちはを表示負の値をとり、加速度の閾値として呼び出します。 ありがとうございました

0

ない「フォールセンサーは」ありませんが、加速度計を使用して、あなたの推測は正しいです。加速度計のデータが記録されたときに記録して測定し、そこからモデルを差し引く。

+0

私はそれをしましたが、私はそれを振ると私にトーストを与えます。 – Abhishek

0

加速度計を使用する必要があります。しかし、それは非常に小さな動きを検出します。

唯一の方法は、状態の変化に関する2つの測定値の差を取得することです。

非常に高い場合は、移動距離が遠く離れていると言いますが、手を落としたり、異常な位置を変えてショックを起こしたりします。

+0

私はそれを知っていますが、モバイルが倒れた場合にのみトーストを得る方法は、2つのしきい値を使用することができないため、それほど単純ではありません。 – Abhishek

+0

なぜ難しいですか?前の値とcurrentValueをonSensorChanged/onAccuracyChangedのメソッドで比較して、前の値と現在の値の2つの変数があります。違いがOKならば..トーストを表示し、そうでなければcurrentValueをpreviousvalueに代入してください。 – madhairsilence

+0

私のコードを試してみてください。 – Abhishek

0

これは私たちが少し物理的に使う必要があります。重力の影響下にある物体は加速度が9.30m/s/sのです(地球上)。この知識があれば、下向きのスピードを得ることができます
1)加速度計を使った軸(Y軸)を基準にして、下向きに
2)これが9.8m/sの定数に等しいかどうかを確認してください秋の速度は9.8メートル/秒の近くに約ある場合

をチェックし、私は自分でほとんど変化がこれを行って、すべてが私はそれがちょうどこれら二つの変数セットを取って、これを取り除くたトースト

+0

私のコードを見ていただけますか? – Abhishek

+0

私はそれが間違っていて、なぜあなたはあなたがY軸のデータだけを使用する必要があります値でsqrtを行っているのか分からなかったこのhttp://code.tutsplus.com/tutorials/using-the-accelerometer-on-android--mobile- 22125また、図を見て、それはあなたにアイデアを与える必要があります –

+0

私はモバイルがy軸だけに落ちることができないので、私はそれを取っている、私はそれをx軸に移動 – Abhishek

関連する問題