1

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

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

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

我的目标是 android 4.0+,所以我不担心该解决方案是否不适用于旧设备。

4

1 回答 1

2

您可以实现一个 SensorEventListener,然后查看 onSensorChanged 中的 Roll:

@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); 



            }


        }
    }




}
于 2013-03-12T21:10:37.320 回答