2011-10-13 71 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演示程序在横向模式下正常工作,或者上述代码有什么问题。

回答

相关问题