【问题标题】:How type TYPE_ACCELEROMETER and TYPE_MAGNETIC_FIELD used to make compass on android devicesTYPE_ACCELEROMETER 和 TYPE_MAGNETIC_FIELD 类型如何用于在 android 设备上制作指南针
【发布时间】:2014-03-11 13:10:02
【问题描述】:

我正在开发一个使用compass 的应用程序,虽然我成功实现了它,但没有像how it works 这样的简短说明。就像如何使用 TYPE_ACCELEROMETERTYPE_MAGNETIC_FIELD 来获取方向一样。我知道我们确实得到了它,我们得到的数组的零索引是azimuth,我们从中获得学位并知道北在哪里。但它是如何做到这一切的。 谁能解释一下吗?

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

据我了解方向shouldn't changed。我可能是错的,任何人都可以指导我。非常感谢。

【问题讨论】:

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


    【解决方案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"没有意义

    【讨论】:

    • 谢谢先生,您向我解释它确实解决了许多困惑,祝您有愉快的一天
    【解决方案2】:

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

    有效的方法是手机感应到最强的“北”磁场,将箭头指向北方,然后当加速度计移动时,它会据此改变箭头。

    此外,如果您将手机垂直举过头顶,由于手机与地面不平行,因此显示屏不会指向北方。

    【讨论】:

    • 亲爱的感谢您的帮助,但让我怀疑的是方向没有改变,就像北方保持北方那么为什么它开始指向不同的方向那部分真的让我感到困惑,我读了更多更多我感到困惑。
    • 垂直握持手机时,“北”箭头会发生变化,因为只有与组平行时才能正确显示。磁传感器是 3D 的,但您试图在 2D 屏幕上显示它。
    • 感谢您的帮助,我将深入了解现在,如果您发现有关概念的任何其他链接而不是我将欣赏的代码,我就不那么困惑了,再次祝福。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2012-12-12
    • 2013-10-11
    • 1970-01-01
    相关资源
    最近更新 更多