【问题标题】:Android compass exampleAndroid 指南针示例
【发布时间】:2012-01-04 21:18:54
【问题描述】:

我正在寻找适用于 Android 的指南针示例。我需要做的就是获得正确的方位(在纵向和横向模式下)。

我已经找到了几个示例,有些只使用Sensor.TYPE_ORIENTATION,有些使用Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELD 的组合。

对于 Android 1.6 - 4.0,哪种方法是正确且常用的方法?

【问题讨论】:

    标签: android compass-geolocation


    【解决方案1】:

    Sensor.TYPE_ORIENTATION 已弃用。

    文档说您应该改用SensorManager.getOrientation()

    因此,您应该阅读Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELD,然后调用SensorManager.getRotationMatrix(),最后调用SensorManager.getOrientation(),这将返回您手机的方向。

    如果您看到此图,则从那里获取手机的方向是微不足道的。这可能是您的第二个示例所做的,但我不知道,因为您没有向我展示它是什么。

    【讨论】:

    • 对不起,我忘了附上例子:codingforandroid.com/2011/01/…那么这个是正确的方法吗?
    • 显然,您如何使用数据取决于您,onSensorChanged 是有趣的数学所在。
    • 还有一个问题:如何从“azimut =orientation[0];”中获得正确的方位角行吗?
    • @nr1 Math.toDegrees(orientation[0])
    【解决方案2】:

    感谢 Dan 提供示例代码。

    但是只有一个小修正:根据这个discussionevent.values更改为event.values.clone()
    修改后它现在对我有用。

    【讨论】:

      【解决方案3】:

      结合使用Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELDSensorManager.getOrientation() 方法并不能给我精确的值。不推荐使用的方法Sensor.TYPE_ORIENTATION 效果很好。 :)

      【讨论】:

      • 然后修复您的代码。代码示例似乎运行良好(codingforandroid.com/2011/01/… 与 gezdy 的评论配对)
      • 或者您可能需要重新校准您的设备
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多