使用Accelerometer和Magnetometer获取用户的航向

时间:2015-04-23 14:56:54

标签: android android-sensors

我正在尝试使用加速度计和磁力计传感器获取Android手机上用户标题的值。我一直在寻找其他许多解决方案,但在尝试实现自己的代码时遇到了一些问题。

以下是代码:

 _ 
| |
|4|
| |

我的问题是:

  1. 当装置时,航向始终偏离约90度 是平的
  2. 当屏幕从平面变为平面时,标题会发生变化 - 我需要它是相同的

1 个答案:

答案 0 :(得分:0)

使用磁力计和加速度计您可以实时找到设备标题。即使您的设备不在平坦的表面上,这也能正常工作。

 if (event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD) {
            geomag[0]=event.values[0];
            geomag[1]=event.values[1];
            geomag[2]=event.values[2];
        }

 if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
            float alpha = 0.8f;

            gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
            gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
            gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];               
        }

            rotationMatrix = new float[16];
            SensorManager.getRotationMatrix(rotationMatrix, null, gravity, geomag);
            SensorManager.getOrientation(rotationMatrix,vals);

            double Heading=vals[0] * (180/Math.PI);