1
在Android API演示中有一個指南針活動,但它僅在我的Google Nexus One上以縱向模式顯示朝北的正確方向。讀取硬件指南針的正確方法是什麼?
我發現下面的代碼在這裏的地方:
private float[] magneticValues;
private float[] accelerometerValues;
@Override
public void onSensorChanged(SensorEvent event)
{
switch (event.sensor.getType())
{
case Sensor.TYPE_MAGNETIC_FIELD:
magneticValues = event.values.clone();
break;
case Sensor.TYPE_ACCELEROMETER:
accelerometerValues = event.values.clone();
break;
}
if (magneticValues != null && accelerometerValues != null)
{
float[] R = new float[16];
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
float[] orientation = new float[3];
SensorManager.getOrientation(R, orientation);
orientation[0] = (float) Math.toDegrees(orientation[0]);
orientation[1] = (float) Math.toDegrees(orientation[1]);
orientation[2] = (float) Math.toDegrees(orientation[2]);
if (orientation[0] >= 360) orientation[0] -= 360;
if (orientation[0] < 0) orientation[0] = 360 - orientation[0];
if (orientation[1] >= 360) orientation[1] -= 360;
if (orientation[1] < 0) orientation[1] = 360 - orientation[1];
if (orientation[2] >= 360) orientation[2] -= 360;
if (orientation[2] < 0) orientation[2] = 360 - orientation[2];
azimuth = orientation[0];
pitch = orientation[1];
roll = orientation[2];
updateView();
}
}
,但它說明不了什麼明智的。我無法理解如何使API演示程序在橫向模式下正常工作,或者上述代碼有什麼問題。