2

我正在尝试检测左,右,上和下震动。我研究并找到了这段代码。

public void onSensorChanged(SensorEvent event) {
            // TODO Auto-generated method stub

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

                float[] values = event.values;

                // Movement
                float x = values[0];
                float y = values[1];
                float z = values[2];


                long actualTime = System.currentTimeMillis();
                if ((actualTime - lastUpdate) > 100) 
                {
                    long diffTime = (actualTime - lastUpdate);
                    lastUpdate = actualTime;


                    if(Round(x,4)>8.0000){
                        Log.d("sensor", "=====LEFT====");


                    }
                    else if(Round(x,4)<-8.0000){
                        Log.d("sensor", "=====RIGHT====");

                    }
                    else if(Round(z,4) < -0.0){
                       Log.d("sensor", "=====UP====");


                    }

                    else if(Round(y,4) < 1.0){
                        Log.d("sensor", "=====DOWN====");

                    }

                float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;

                if (speed > SHAKE_THRESHOLD) {
                    //Log.d("sensor", "shake detected w/ speed: " + speed);
                    //Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();
                }
                last_x = x;
                last_y = y;
                last_z = z;
                }
            }

        }

我试图研究它,但我有一些问题。
1. 在哪里可以设置每次抖动检测后的延迟?我希望它在最后一次检测到震动的 1 秒后检测到震动。
2. 为什么我把它放在一个平面上,它总是检测到向下。
3. 我无法检测到正确的运动抖动

任何帮助和建议将不胜感激。

4

1 回答 1

0

首先,这段代码似乎检测的是运动而不是摇晃(我理解摇晃是一种单向运动,然后反向运动),这可能会导致您无法理解它的工作原理。

我在哪里可以设置每次抖动检测后的延迟?我希望它在最后一次检测到震动的 1 秒后检测到震动。

if ((actualTime - lastUpdate) > 100)是检测之间的间隔发生的地方 - 这里的 100 告诉程序只看到 100 毫秒后的变化,所以如果你想要 1 秒,请将其更改为 1000

为什么如果我将它放在平坦的表面上,它总是会检测到向下。

我不完全确定这里的上下文和方向,因为它不清楚,但不要忘记你认为的“向下”可能不是在你的空间中,而是在手机中,只有当手机是直立的。如果手机在背面,左右是相同的,但向下(即朝向地面)实际上是传感器的背面,因为它朝向手机的背面。

  1. 我无法检测到正确的运动抖动

TBH 我不知道为什么,这里的代码看起来不错。可能是电话问题,可能是实现问题(正如我所说,上面的代码是整体运动,而不是返回的“摇动”,所以它可能是你如何正确地摇动它来测试它不会触发它,但你的左摇正在触发它

于 2013-01-18T14:10:22.253 回答