如何准确检测phone在Android中来回倾斜的时间

How to accurately detect when phone has been tilted back and forth in Android

我想在phone沿YZ轴来回倾斜时触发一些功能。如果您将 phone 放在脸前,您会向后倾斜直到它几乎与地板平行,然后再向上倾斜直到它垂直于地板。看下图,就是pitch

我试图通过只查看加速度计的 Z 值来做到这一点。检测 Z 的变化理论上应该足以检测音高的变化,但实际上根据采样率和变化的阈值,它非常不稳定。快速来回倾斜 phone 的人与缓慢来回倾斜的人会产生不同的结果。我该怎么做才能不依赖于采样率和倾斜阈值?

@Override
public void onSensorChanged(SensorEvent event) {
    newZ = event.values[2];

    if (Math.abs(oldZ - newZ) > 3) {

        //do something
    }

    oldZ = newZ;
}

您不能使用 z 值来检测倾斜,因为加速度计值是根据设备坐标给出的。您应该改用倾斜度的变化(参见 How to measure the tilt of the phone in XY plane using accelerometer in Android