OrientationEventListener

OrientationEventListener

问题
在Android服务中,我想检测屏幕旋转是否发生变化。通过旋转,我不仅是指肖像还是风景。我的意思是屏幕旋转有任何变化。此类更改的示例包括对以下内容的更改:

  • 肖像
  • 反向肖像
  • 景观
  • 反向景观

  • 请注意,此问题与更改设备方向无关。它仅与屏幕方向/旋转有关。
    我尝试过的
  • 通过Configuration监听ACTION_CONFIGURATION_CHANGED的更改。这仅涵盖人像和风景之间的变化,因此180°的变化不会触发此变化。

  • 为什么我要这样做
    我正在开发一个自定义屏幕方向管理应用程序。

    最佳答案

    批准的答案会起作用,但是如果您想要更高的检测分辨率(或进一步支持API 3),请尝试使用OrientationEventListener,它可以以度为单位报告手机的方向。

    mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    
    OrientationEventListener orientationEventListener = new OrientationEventListener(this,
            SensorManager.SENSOR_DELAY_NORMAL) {
        @Override
        public void onOrientationChanged(int orientation) {
            Display display = mWindowManager.getDefaultDisplay();
            int rotation = display.getRotation();
            if(rotation != mLastRotation){
                 //rotation changed
                 if (rotation == Surface.ROTATION_90){} // check rotations here
                 if (rotation == Surface.ROTATION_270){} //
            }
            mLastRotation = rotation;
        }
    };
    
    if (orientationEventListener.canDetectOrientation()) {
        orientationEventListener.enable();
    }
    

    10-08 14:43