我试图在我的Android设备上检测到向上运动,但我发现这很困难。我已经编写了以下代码,它适用于所有方向上的所有突然运动(即快速加速)。但是,我希望这只能用于突然向上运动。非常感谢任何帮助。
public void onSensorChanged(SensorEvent event) {
// alpha is calculated as t / (t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = 0.8f;
gravity = new float[3];
linear_acceleration = new float[3];
linear_acceleration_old = new float[3];
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
System.out.println(linear_acceleration[0] + " "
+ linear_acceleration[1]+" " +linear_acceleration[2]);
//detects swift movements, but I want to detect only upward ones
if((Math.abs(linear_acceleration[1] - linear_acceleration_old[1]) > 10.0f
&& Math.abs(linear_acceleration[2] - linear_acceleration_old[2]) > 5.0f)
|| isFirstEvent) {
if(!isFirstEvent)
//do something
linear_acceleration_old[0] = linear_acceleration[0];
linear_acceleration_old[1] = linear_acceleration[1];
linear_acceleration_old[2] = linear_acceleration[2];
isFirstEvent= false;
}
}
答案 0 :(得分:3)
我不太确定你的意思是“向上”,但是:
让手机放在桌面上并将其抬起(使其高于桌子),这将是Z轴的变化。
垂直握住手机就好像在说话然后把它拉起来(将它抬高),这将是Y轴的变化。
如果您对检测这些动作感兴趣,则应修改代码以仅在相关轴上计算增量。
答案 1 :(得分:0)
您不应仅对x,y,z加速计传感器进行操作,还应考虑方向传感器:SensorManager.getOrientation
这样你就可以确保“向上”的方向。