【发布时间】:2012-01-24 15:08:24
【问题描述】:
在
的帮助下我得到了我的手机方向SensorManager.getOrientation
但是结果很不稳定,大概是+-8度,有什么好的过滤结果的方法吗?
这就是我获取值的方式:
public void onSensorChanged(SensorEvent event)
{
switch (event.sensor.getType ()){
case Sensor.TYPE_ACCELEROMETER:
aValues = event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mValues = event.values.clone();
break;
}
float[] R = new float[16];
float[] orientationValues = new float[3];
if( aValues == null || mValues == null )
return;
if( !SensorManager.getRotationMatrix (R, null, aValues, mValues) )
return;
float[] outR = new float[16];
SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_Z, SensorManager.AXIS_MINUS_X, outR);
SensorManager.getOrientation (outR, orientationValues);
orientationValues[0] = (float)Math.toDegrees (orientationValues[0]);
orientationValues[1] = (float)Math.toDegrees (orientationValues[1]);
orientationValues[2] = (float)Math.toDegrees (orientationValues[2]);
}
【问题讨论】:
-
您可以使用 System.arraycopy 而不是 event.values.clone() 来提高性能。在这里,您总是在创建新对象,这非常昂贵。