我正在为Android制作一个指南针应用程序,我已经设法通过使用陀螺仪、加速计和磁力计(参见我使用的教程的here )来捕捉方位角。不幸的是,只有当设备与地面平行放置(例如,平放在桌子上/我的手掌等)时,指南针读数才能正常工作。每当我将设备倾斜到完全直立的位置(屏幕对着我),指南针就会给出错误的读数。我假设这是因为当设备本身的方向改变时,轴也会改变。如何防止这种情况发生?我希望指南针在这两个位置都工作:平行于地面和完全直立的位置。我该怎么做呢?如果有人能给我一个正确的方向,那将是非常有帮助的。
谢谢你的帮助!:D
发布于 2013-04-14 06:07:55
在SensorFusionActivity中添加mDisplay变量,如下所示:
private Display mDisplay = null;然后,在onCreate方法中添加以下代码:
mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();最后,按如下方式修改calculateAccMagOrientation:
// calculates orientation angles from accelerometer and magnetometer output
public void calculateAccMagOrientation() {
if(SensorManager.getRotationMatrix(rotationMatrix, null, accel, magnet)) {
int rotation = mDisplay.getRotation();
if(rotation == Surface.ROTATION_0)
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_X, rotationMatrix);
else if(rotation == Surface.ROTATION_180)
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, rotationMatrix);
else if(rotation == Surface.ROTATION_270)
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Y, rotationMatrix);
SensorManager.getOrientation(rotationMatrix, accMagOrientation);
}
}https://stackoverflow.com/questions/14046846
复制相似问题