我在我的应用程序中使用类型为ROTATION_VECTOR的传感器数据。
使用我的Nexus 5,我可以从orientation [0]获取方位角,并且可以在下图所示的范围内获得手机的航向(非常精确)。
由于我已经在不同设备上尝试过我的应用程序,我发现传感器值与我的Nexus 5测试设备不同。在我的Samsung Galaxy Nexus和Samsung Galaxy S3 Mini上,方位角受到以下图片所示的倾斜设备的影响。
TYPE_ROTATION_VECTOR正在使用传感器融合技术,这就是为什么我使用传感器测试应用程序检查了不同设备上的单个传感器值。在Nexus 5上,z轴的方向值在倾斜设备时保持基本不变,在Samsung 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);