我正试图检测左,右,上,下摇晃。我研究并发现了这段代码。
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.我无法检测到正确的运动抖动
任何帮助和建议都将不胜感激。
答案 0 :(得分:0)
首先,这段代码似乎检测到移动而不是摇动(我理解摇动是一种单向运动,然后是另一种运动),这可能会导致你理解它的工作方式出现问题。
每次震动检测后,我可以在哪里设置延迟?我希望它在最后一次检测到的震动1秒后检测到震动。
if ((actualTime - lastUpdate) > 100)
是检测之间的间隔发生的地方 - 这里的100告诉程序只能看到100 ms后的更改,所以如果你想要1秒,将其更改为1000
为什么如果我将它放在平坦的表面上,它总会检测到。
我不完全确定这里的背景和方向,因为它不清楚,但是不要忘记,因为你认为它可能不会在你的空间中“向下”,而是在电话中,向下是只有当手机直立时才会打倒。如果手机在它背面,左右两边是相同的,但向下(即朝向地面)实际上是传感器的后面,因为它是朝向手机的背面。
- 我无法检测到正确的动作震动
醇>
TBH我不知道为什么,这里的代码似乎很好。可能是一个手机的东西,可能是一个实施问题(正如我所说,上面的代码是整体运动,而不是回归'震动',所以它可能是你如何正确地摇动它来测试这不是触发它,但你的左摇是触发它