2016-10-31 2 views
1

Мне нужно знать, когда экран моего Android-устройства повернут из одного пейзажа в другой (rotation_90 to rotation_270). В моей службе Android я переопределил onConfigurationChanged(Configuration newConfig), чтобы знать о ротации устройства. Но этот метод вызывается только системой, если устройство повернуто от ORIENTATION_PORTRAIT до ORIENTATION_LANDSCAPE, а не если оно повернуто от ORIENTATION_LANDSCAPE (90 °) к другому ORIENTATION_LANDSCAPE (270 °) !!Android пейзаж экран поворот на 180 °

Как я могу быть вызван в этом случае? Спасибо.

ответ

1

Вы можете активировать OrientationEventListener для своей деятельности.

OrientationEventListener mOrientationListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) { 

     @Override 
     public void onOrientationChanged(int orientation) { 
      Log.v(TAG, "Orientation changed to " + orientation); 

      if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) { 
       return; 
      } 

      int degrees = -1; 
      if (orientation < 45 || orientation > 315) { 
       Log.i(TAG, "Portrait"); 
      } else if (orientation < 135) { 
       degrees = 90; 
       Log.i(TAG, "Landscape"); // This can be reverse landscape 
      } else if (orientation < 225) { 
       degrees = 180; 
       Log.i(TAG, "Reverse Portrait"); 
      } else { 
       degrees = 270; 
       Log.i(TAG, "Reverse Landscape"); // This can be landscape 
      } 
     } 
    }; 

    if (mOrientationListener.canDetectOrientation() == true) { 
     Log.v(TAG, "Can detect orientation"); 
     mOrientationListener.enable(); 
    } else { 
     Log.v(TAG, "Cannot detect orientation"); 
     mOrientationListener.disable(); 
    } 
+0

Я мог бы быть решением. Этот слушатель не должен много потреблять, поскольку он вызывается всякий раз, когда устройство ориентации изменилось? Мое приложение постоянно работает. –

+0

Это системный триггер, как вы хотели. Он вызывается всякий раз, когда угол изменяется. Он не ждет, пока ориентация не изменится на 90 градусов, чтобы вызвать этот слушатель. Так что это называется много. В этом суть всех этих «if-else» элементов управления. – FatihC

+0

Вы правы. Кажется, это единственный способ получить эту информацию. Благодарю. –

0

Вы можете сохранить прежнюю ориентацию как переменную INT члена, используя этот код:

int oldRotation = getWindowManager().getDefaultDisplay().getRotation(); 

А затем проверить, если устройство вращали из одного режима в другой ландшафтной.

if(rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) { 
    int newRotation = getWindowManager().getDefaultDisplay().getRotation(); 
    if(newRotation != oldRotation) { 
     // rotation from 90 to 270, or from 270 to 90 
    } 
    oldRotation = newRotation; 
} 
+1

Да, я делаю это, но я ищу системный обработчик для запуска теста или вам необходимо регулярно проверять состояние вращения: большой расход батареи и процессора. –

Смежные вопросы