我正在尝试通过听TYPE_ROTATION_VECTOR
来使用Android传感器管理器,但遇到了一些问题。
总体来说,一切正常,但是当我将手机正面朝北(方位角180或360)时,它看起来像用于测量手机音高的传感器停止工作(Samsung GALAXY S10 Android 10 )。
我意识到,很奇怪的是,当电话面向北时,负责测量roll
的传感器现在会改变pitch
。
我水平使用手机。
private final float quaternion = new float[4];
private final float rotationMatrix = new float[9];
private final float orientationAngles = new float[3];
@Override
public void init(SensorManager sensorManager){
this.sensorManager = sensorManager;
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), sensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onSensorChange(SensorEvent event){
SensorManager.getQuaternionFromVector(quaternion, event.Values);
SensorManager.getRotationMatrixFromVector(rotationMatrix, quaternion);
SensorManager.getOrientation(rotationMatrix, orientationAngles);
float azimuth = ((float) Math.toDegrees(orientationAngles[0]) + 180) % 360;
float pitch = (float) Math.toDegrees(orientationAngles[1])
...
}
有什么主意吗? :)