Я имел дело с той же проблемой, используя API 8. Похоже, что в режиме reserseLandscape, если вы вызовете
getResources().getConfiguration().orientation
Android вернет 2 (SCREEN_ORIENTATION_USER), который не заблокирует ориентациюсовсем.Фактически константа SCREEN_ORIENTATION_REVERSE_LANDSCAPE даже не определена для класса ActivityInfo, даже если значение действительно существует.Для моего приложения в итоге я создал этот метод:
public void lockScreenOrientation() {
switch (((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay().getRotation()) {
case Surface.ROTATION_90:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Surface.ROTATION_180:
setRequestedOrientation(9/* reversePortait */);
break;
case Surface.ROTATION_270:
setRequestedOrientation(8/* reverseLandscape */);
break;
default :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Я вызываю этот метод всякий раз, когда мне нужно заблокировать ориентацию, а затем я могу просто отпустить его, вызывая
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Надеюсь, чтопомогает.