2013-03-12 59 views
1

我的应用仅锁定在肖像方向,但是在一个片段中,我有一个相机预览,我想根据设备方向旋转捕获的图像。我相信因为我的应用程序只是肖像,下面的代码始终记录为零。Android:在仅肖像应用中获取物理设备方向

Display display = ((WindowManager)getActivity().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int rotation = display.getRotation(); 
Log.i(TAG, "Rotation: " + rotation); 

是否可以在将应用程序锁定到肖像时获取设备的实际方向?

我针对的是Android 4.0+,因此我不担心解决方案是否无法在较旧的设备上使用。

回答

2

你可以实现一个SensorEventListener,然后看看onSensorChanged卷轴:

@Override 
public void onSensorChanged(SensorEvent event) {  

    synchronized(this) 
    { 
     if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
      mAccelerometerValues = event.values;  
     }   
     if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
      mGeomageneticValues = event.values;  
     }  

     if ((mAccelerometerValues != null) && (mGeomageneticValues != null)) 
     { 

      boolean success = SensorManager.getRotationMatrix(R, I, mAccelerometerValues, mGeomageneticValues); 
      if (success) 
      { 
       SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR); 
       SensorManager.getOrientation(outR,orientation); 
       mYaw = orientation[0] * MathX.toDegreesF;    
       mPitch = orientation[1] * MathX.toDegreesF; 
       mRoll = orientation[2] * MathX.toDegreesF; 

       String sText = String.format("a:%1.4f\np:%1.4f\nr:%1.4f", yaw,pitch,roll); 



      } 


     } 
    } 




}