检测Android中的突然向上运动

时间:2011-11-06 17:25:45

标签: android

我试图在我的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;
            }
        }

2 个答案:

答案 0 :(得分:3)

我不太确定你的意思是“向上”,但是:

  1. 让手机放在桌面上并将其抬起(使其高于桌子),这将是Z轴的变化。

  2. 垂直握住手机就好像在说话然后把它拉起来(将它抬高),这将是Y轴的变化。

  3. 如果您对检测这些动作感兴趣,则应修改代码以仅在相关轴上计算增量。

答案 1 :(得分:0)

您不应仅对x,y,z加速计传感器进行操作,还应考虑方向传感器:SensorManager.getOrientation

这样你就可以确保“向上”的方向。

相关问题