如何在'setRequestedOrientation'之后知道设备方向是否已更改

时间:2014-12-23 08:01:45

标签: android

我想开发一个视频播放器应用,当设备是风景时,视频是全屏播放,当设备是肖像时视频是半屏播放。在景观中,有一个按钮,当用户点击它时,应用程序将强制为纵向(此时,设备仍然是水平的。我想要的是什么:当用户将设备更改为垂直时,并更改设备再次水平,应用程序可以自动从纵向更改为横向。

我打电话给setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);逼迫肖像。致电setRequestedOrientation()后,当我将设备从水平更改为垂直时,onConfigurationChanged()将不会再次呼叫。因此,没有时间点致电setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)

我尝试OrientationEventListener,但在onOrientationChanged()中会有很多值会返回。但我想要的只是设备方向(风景或肖像)。

还有其他方法可以做我想要的吗?

2 个答案:

答案 0 :(得分:4)

你必须使用OrientationEventListener,我这样使用,然后像往常一样使用onConfigurationChanged:

 OrientationEventListener orientationEventListener = new OrientationEventListener(getApplicationContext()) {
            @Override
            public void onOrientationChanged(int orientation) {
                boolean isPortrait = isPortrait(orientation);
                if (!isPortrait && savedOrientation == ORIENTATTION_PORTRAIT) {
                    savedOrientation = ORIENTATION_LANDSACAPE;
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
                } else if (isPortrait && savedOrientation == ORIENTATION_LANDSACAPE) {
                    savedOrientation = ORIENTATTION_PORTRAIT;
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
                }
            }
        };
        orientationEventListener.enable();

private boolean isPortrait(int orientation) {
        if (orientation < 45 || orientation > 315) {
            return true;
        }
        return false;
    }

您在此处有更多信息:https://developer.android.com/reference/android/view/OrientationEventListener.html

答案 1 :(得分:-2)

您可以覆盖onConfigurationChanged(Configuration config);

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // Landscape
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        // Portrait
    }
}