2011-10-13 107 views
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演示程序在橫向模式下正常工作,或者上述代碼有什麼問題。

回答

相關問題