【问题标题】:Which Android sensor should I use for getting magnetic orientation and inclination towards the horizon?我应该使用哪个 Android 传感器来获取磁场方向和朝向地平线的倾斜度?
【发布时间】:2016-08-10 09:57:50
【问题描述】:

到目前为止,我一直在 Android 上使用TYPE_ORIENTATION 传感器,尽管它已被弃用并且确实不准确,所以我决定我需要更好的东西。我需要得到的是朝向磁北的方向(如指南针)和朝向地平线的倾角(手机相机指向的位置与地平线之间的角度)。

对于类似指南针的功能,我不知道是否必须使用TYPE_MAGNETIC_FIELD 传感器或TYPE_ROTATION_VECTOR

对于地平线的倾向,我不知道我应该使用TYPE_ACCELEROMETER 传感器还是TYPE_GRAVITY 传感器。重力传感器似乎和加速度计一样,但只有重力加速度,所以我想我应该使用重力传感器吗?

任何类型的答案都是有用的,甚至声明此问题已回答并提供链接。谢谢。

【问题讨论】:

    标签: android android-sensors


    【解决方案1】:

    对于类似指南针的功能,我会使用 TYPE_MAGNETIC_FIELD。但是您必须将它与 TYPE_ACCELEROMETER 的值结合起来,因为对于指南针,您还需要手机相对于地球(或重力)的当前位置。然后你要计算手机的rotationMatrix:

    SensorManager.getRotationMatrix(this.rotationMatrix,null, this.lastAccelerometer, this.lastMagnetometer);
    SensorManager.getOrientation(this.rotationMatrix, this.orientation);
    
    float azimuthInRadiands = this.orientation[0];
    float azimuthInDegrees = (float) Math.toDegrees(azimuthInRadiands);
    

    这段代码来自我写的一个助手。如果你不想,你可以用它来提供指南针,这样你就不必实现它:

    CompassAssistant Helper Class

    如果你不想的话,你也可以阅读代码。

    对于朝向地平线的倾角,您可以在 TYPE_GRAVITY 或 TYPE_ACCELEROMETER 之间进行选择。如果你为 API-Level 9 以上的 Android 开发,你应该使用 TYPE_GRAVITY。你应该这样做,因为 TYPE_GRAVITY 只给你重力的影响,而加速度计给你重力加上手机的加速度。如果你想使用加速度计,你应该使用高通滤波器来减去加速度,这样你就只能得到重力。否则,当用户移动手机时,您的倾向会发生变化。所以这取决于您必须提供的 API 级别。

    希望我能帮到你。

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多