我在我的应用程序中使用 ROTATION_VECTOR 类型的传感器数据。
使用我的 Nexus 5,我可以从方向 [0] 获得方位角,并且可以在下图所示的范围内获得手机的航向(非常准确)。
由于我在不同的设备上尝试过我的应用程序,我发现传感器值与我的 Nexus 5 测试设备不同。如图所示,在我的三星 Galaxy Nexus 和三星 Galaxy S3 Mini 上,方位角会受到设备倾斜的影响。
TYPE_ROTATION_VECTOR 正在使用传感器融合,这就是我使用传感器测试应用程序检查不同设备上的单个传感器值的原因。在 Nexus 5 上,z 轴的方向值在设备倾斜时保持大致相同,在三星 Galaxy Nexus 上,z 值在倾斜时发生变化(从直立到躺下大约 90°)。我担心传感器融合正在使用这些值,这就是为什么我的方位角在不同设备上不同的原因。
有没有人遇到过类似的情况,甚至更重要的是:是否有人有解决方法或不同的方式来接收方位角?
为了确定,我在寻找后置摄像头指向的方向......
这是我的代码:
final float[] mRotationMatrix = new float[9];
final float[] mRotationMatrixFromVector = new float[9];
final float[] orientation = new float[3];
...
SensorManager.getRotationMatrixFromVector(mRotationMatrixFromVector,
event.values);
// enables usable range like in picture
SensorManager.remapCoordinateSystem(mRotationMatrixFromVector,
SensorManager.AXIS_X, SensorManager.AXIS_Z,
mRotationMatrix);
SensorManager.getOrientation(mRotationMatrix, orientation);