我希望能够检测到手机朝地面加速的情况(这可能意味着需要使用重力传感器)。我已经在Android文档中阅读了很多关于这个主题的内容,包括高通和低通滤波器以及其他帖子,现在我有一个代码示例,可以剥离重力后获取X,Y和Z轴上的加速度。
所以,
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
final float alpha = (float) 0.8;
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];
}
所以,
linear_acceleration
应该是不带重力的 X、Y、Z 轴加速度。这很好,但问题显然在于它取决于用户如何拿着手机,例如在电梯里 - 如果他将其平放,与地面平行 - Z 轴
将改变,如果他将其竖直拿起 - Y 轴
将改变等等。因此,例如,如果用户斜向持有手机,则加速度将在不同轴之间“分配”,需要进行某种数学计算,考虑重力方向在哪里,才能计算出实际方向上的加速度。如果我理解有误,请纠正我。有没有可靠的方法来检测向下(朝向地球)的加速度?也许可以使用其他传感器,比如陀螺仪?顺便说一下 - 关于 TYPE_LINEAR_ACCELERATION
类型,我读到了这个答案,说它实际上并不是很准确。