Вам нужен Display
экземпляр во-первых:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
Тогда ориентация может называться так:
int orientation = display.getOrientation();
Проверка ориентации в пути и использовать это для ориентации изменения:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Надеюсь, это помогает.
Update:
Хорошо, предположим, что вы имеете в oAllow
вар, который Boolean
и значение по умолчанию является False
.
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
switch(orientation) {
case Configuration.ORIENTATION_PORTRAIT:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
break;
case Configuration.ORIENTATION_LANDSCAPE:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
break;
}
}
Вы можете добавить другие варианты.
Я не пробовал этот образец, но, по крайней мере, рассказывал вам некоторые подсказки о том, как их решить. Скажите, если у вас возникли какие-либо ошибки.
UPDATE
getOrientation()
уже устарела see here. Вместо этого используйте getRotation()
.Для того, чтобы проверить, если устройство находится в ландшафтном режиме вы можете сделать что-то вроде этого:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();
int orientation = display.getRotation();
if (orientation == Surface.ROTATION_90
|| orientation == Surface.ROTATION_270) {
// TODO: add logic for landscape mode here
}
Вам не нужно, чтобы перехватить запрос, а затем разрешить или запретить его. Вы можете заблокировать или освободить ориентацию заранее. Есть также больше вариантов с этим методом, например, разрешить ли поворот на 180 градусов при блокировке. Пожалуйста, прочтите мой ответ ниже, а не выбранный. –