Search code examples
androidandroid-orientation

Different screen orientation on different devices when landscape mode


I am using

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

for my Activity and I am trying to use OrientationEventListener to find the orientation of the device. On some devices my landscape orientation is showing values around 270 and other devices shows values around 0. On every device where the Home button is placed the orientation value shows 0. I want to have same values when holding the all devices in landscape mode. Is there a flag that can show me which device is showing 270 or 0 for landscape mode as default orientation.

This is my OrientationEventListener

    mOrientationListener = new OrientationEventListener(this,
            SensorManager.SENSOR_DELAY_NORMAL) {

        @Override
        public void onOrientationChanged(int orientation) {

            Log.v("Orientation changed to ", String.valueOf(orientation));

        }
    };

Is there a trick that can help to resolve the issue?


Solution

  • I have found the solution.

    With this code I am getting the default display rotation:

    int rotation = getWindowManager().getDefaultDisplay().getRotation();
    

    in the body of my onOrientationChanged method I can make this:

                if (rotation == 0) {
                    if (orientation  >= 90 && orientation <= 270) {
    
                    } 
                } else if (rotation == 1) {
                    if (orientation < 180 && orientation > 0 ) {
    
                    }
                }
    

    This will enter the if only if my device is not in the correct landscape position. If my device is on 90+ angle I can give the user a message.