我正在开发一款简单的Android应用程序,其中需要识别北方。
因此,我实现了SensorEventListener
,并使用了类似于以下内容的代码:
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)
{
SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, orientationVals);
SensorManager.getOrientation(mRotationMatrix, orientationVals);
orientationVals[0] = (float) Math.toDegrees(orientationVals[0]);
orientationVals[1] = (float) Math.toDegrees(orientationVals[1]);
orientationVals[2] = (float) Math.toDegrees(orientationVals[2]);
tv.setText(" Yaw: "+ orientationVals[0] +"\n Pitch: "+ orientationVals[1]+"\n Roll: "+ orientationVals[2]);
}
}
问题在于代码行
SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, orientationVals);
似乎不起作用,因为无论是否有这行代码,Yaw(方位角)的值都取决于手机头部的朝向(让其放在背面)。
我期望的是,使用我的重新映射,Yaw会根据手机后面(即后置摄像头)的朝向而改变。
为什么我的重新映射不起作用?