我正在开发一个使用compass
的应用程序,虽然我成功实现了它,但没有how it works
的简短解释。与TYPE_ACCELEROMETER
和TYPE_MAGNETIC_FIELD
如何用于获取方向一样。我知道我们确实得到了它,我们得到的数组的零索引是azimuth
,从中得到学位并且知道了北方的位置。但它如何实现这一切。 有人可以解释一下吗?
其次如果我把我的手机放在地板上,假设它放在ground
的北方向,我现在拿起我的手机拿着我upside down
会发生什么以及为什么?
根据我的理解方向shouldn't changed
。我可能错了,有人可以指导我这个。非常感谢。
答案 0 :(得分:1)
我正在上一个免费的在线Android课程,这是他用来制作简单指南针的示例代码,你可以看一下:https://github.com/aporter/coursera-android/tree/master/Examples/SensorCompass。
工作方式是手机感应最强的“北”磁场,并将箭头指向北方,然后当加速度计移动时,它会根据该方向改变箭头。
此外,如果您将手机垂直放在头顶上方,显示屏将不会指向北方,因为手机与地面不平行。
答案 1 :(得分:1)
您需要Magnectic field
和Accelerometer
来计算指南针方向。您可以看到为什么如果您阅读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"