2012-04-28 2 views
4

Мое приложение для Android будет работать на фоне, и мне нужно немедленно известить об изменении ориентации. например. Когда пользователь поворачивает телефон от портрета к пейзажу (или от пейзажа к портрету), система должна сообщить моему приложению, что ориентация изменилась.Как зарегистрировать слушателя для изменения ориентации?

Спасибо.

ответ

5

Этот метод вызывается, когда экран повернут

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
     //Do stuff here 
} 
+0

Этот метод будет вызываться, если мое приложение не было запущено? Я действительно нуждаюсь в том, что мое приложение просыпается (или начинает) при изменении ориентации. –

+0

Прочитайте [this] (http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged (android.content.res.Configuration)) и [this] (http://developer.android. com/guide/topics/resources/runtime-changes.html) – Rafiq

+1

Я прочитал их перед тем, как опубликовать этот вопрос. Они сказали, что «Вызывается системой, когда конфигурация устройства изменяется во время вашей активности». Таким образом, метод не будет вызываться, если мое приложение не запущено. Есть ли решение для меня? –

2

Вам не нужно явно задать ориентацию слушателя.

onConfigurationChanged будет вызываться системой.

@Override 
public void onConfigurationChanged(Configuration myConfig) { 
    super.onConfigurationChanged(myConfig); 
    int orient = getResources().getConfiguration().orientation; 
    switch(orient) { 
       case Configuration.ORIENTATION_LANDSCAPE: 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
        break; 
       case Configuration.ORIENTATION_PORTRAIT: 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
        break; 
       default: 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
       } 
} 
0

Но вы можете реализовать onConfigurationChanged в демонах. здесь: Service.