モバイルが倒れたときに検出するアンドロイドプロジェクトを作成しています。アプリでどのセンサーを使用すればいいのか教えてもらえますか?加速度センサーがこの種類の目的で使用することはわかっていますが、私の手と私は携帯電話が落ちるときにのみ乾杯をしたい。ここ が私のコードです:モバイルが落ちたときにトーストをどうやって得るのか教えてもらえますか?
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();
} } }}
実際にはどうなりますか?あなたは秋を検出しますが、揺れも検出しますか?あなたがそれを振ると、あなたがそれを落としたときに(私はそうではないが十分に硬い表面であると仮定します)、Log.dにどの値を入れますか? – CloudWalker
@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
MIN_TIME_BETWEEN_SHAKES_MILLISECSは使用しないでください。あなたの手(またはポケット、またはテーブルの上)に電話があると想像してください。いくつかのアクションは、小さなスパイクを振り下ろしてから、1秒未満の間無音状態になり、地面にぶつかります(1つは大きなスパイクです)。次に2〜2回は何もしません(所有者がそれを選ぶまで)。最大のスパイクとその時間を記録しているすべてのイベントを調べてから、シーケンスに従うかどうかを確認する必要があります:揺れ(小さなスパイク)、短時間の無重力、大きなスパイク、秒。 – CloudWalker