SCREEN_ORIENTATION_LANDSCAPE вверх ногами - почему?

Я использую следующий код для установки блокировки ориентации в соответствии с предпочтениями пользователя:

 private void doLock(boolean locked) {
     if (locked) {
       int o = getResources().getConfiguration().orientation;
       if (o == Configuration.ORIENTATION_LANDSCAPE)
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);       
       else if (o == Configuration.ORIENTATION_PORTRAIT)
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);       
     } 
     else {
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
     }
 }

Работает, кроме случая, когда я в разблокированном режиме (SCREEN_ORIENTATION_SENSOR) с показом экранаLANDSCAPE правильно (!), затем вызватьdoLock(true) а также...

вместо блокировки экрана наLANDSCAPE в текущем (правильном) альбомном виде он фиксируется наupside down ландшафтный вид. то же самое точно, но перевернуть вертикально (y становится-y).

Почему это так и как мне подойти к этой проблеме, чтобы решить ее?

Мой первоначальный запрос показывает, что естьдовольно много Возможности, кроме общих двух (portrait, landscape), в том числеreverseLandscape, но моя догадка говорит мне, что эта проблема может бытьв зависимости от устройства и поэтому, используя его, я мог бы решить проблему только для моего телефона, но не для всех других устройств.

Есть ли способ заставить исправитьlandscape ориентация (при переключении сsensor) во всех устройствах?

Чтобы сделать это более понятным и легче воспроизвести, вот шаги, которые показывают проблему:

Start with phone rotated to the right (clockwise), in unlocked mode (SCREEN_ORIENTATION_SENSOR) with the screen showing LANDSCAPE correctly (!), Then invoke doLock(true) Instead of the screen locking to LANDSCAPE in its current (correct) landscape view, it locks to an upside down landscape view. i.e. same exact but flip vertically (y becomes -y).

Ответы на вопрос(4)

Ваш ответ на вопрос