我正在开发一个Android项目,我需要在用户转动时检测确切的方向(即左或右或底部或顶部)。我已经通过使用带有磁传感器的加速度计找到了方向,但我无法确定要转动的最大值。
我面临的问题是: 我无法检测到中心点/位置。
当用户从中心位置向左转动手机时,它会将其检测为左转。
然而,当我将位置返回到中央位置时,手机会将其检测为两个动作:两个动作都离开了。我的理解是:如果传感器正确固定了中心位置(原点),则可以正确检测到运动。但是,由于中心位置不固定,因此不会发生这种情况。
请指导我解决它。如果您需要进一步澄清,请告诉我。
我的代码如下
public void onSensorChanged(SensorEvent event) {
azimuth = event.values[0]; // azimuth
pitch = event.values[1]; // pitch
roll = event.values[2]; // roll
if (pitch < -45 && pitch > -135) {
// top
currentSide = Side.TOP;
} else if (pitch > 45 && pitch < 135) {
// bottom
currentSide = Side.BOTTOM;
} else if (roll > 45) {
// right
currentSide = Side.RIGHT;
} else if (roll < -45) {
// left
currentSide = Side.LEFT;
}
if (currentSide != null && !currentSide.equals(oldSide)) {
switch (currentSide) {
case TOP :
listener.onTopUp();
break;
case BOTTOM :
listener.onBottomUp();
break;
case LEFT:
listener.onLeftUp();
break;
case RIGHT:
listener.onRightUp();
break;
}
oldSide = currentSide;
}
// forwards orientation to the OrientationListener
listener.onOrientationChanged(azimuth, pitch, roll);
}
感谢您的帮助!