类型TYPE_ACCELEROMETER和TYPE_MAGNETIC_FIELD用于在Android设备上制作指南针

时间:2014-03-11 13:10:03

标签: android android-sensors android-orientation compass-geolocation

我正在开发一个使用compass的应用程序,虽然我成功实现了它,但没有how it works的简短解释。与TYPE_ACCELEROMETERTYPE_MAGNETIC_FIELD如何用于获取方向一样。我知道我们确实得到了它,我们得到的数组的零索引是azimuth,从中得到学位并且知道了北方的位置。但它如何实现这一切。 有人可以解释一下吗?

其次如果我把我的手机放在地板上,假设它放在ground的北方向,我现在拿起我的手机拿着我upside down会发生什么以及为什么?

根据我的理解方向shouldn't changed。我可能错了,有人可以指导我这个。非常感谢。

2 个答案:

答案 0 :(得分:1)

我正在上一个免费的在线Android课程,这是他用来制作简单指南针的示例代码,你可以看一下:https://github.com/aporter/coursera-android/tree/master/Examples/SensorCompass

工作方式是手机感应最强的“北”磁场,并将箭头指向北方,然后当加速度计移动时,它会根据该方向改变箭头。

此外,如果您将手机垂直放在头顶上方,显示屏将不会指向北方,因为手机与地面不平行。

答案 1 :(得分:1)

您需要Magnectic fieldAccelerometer来计算指南针方向。您可以看到为什么如果您阅读getRotationMatrix的源代码或更详细的解释,请参阅Convert magnetic field X, Y, Z values from device into global reference frame

如果站在同一个地方,磁场不会改变。那就是在onSensorChanged中返回的磁场矢量应该变化很小。它不是变化的矢量,而是变化的设备的坐标。这是计算内容的含义,并调用让您感到困惑的"compass direction"。在这种情况下,用作"compass direction"的方向是y coordinate的方向。因此,当您垂直握住手机时,y coordinate指向天空或地面,谈论"compass direction"

是没有意义的