Ориентация экрана Android обнаруживает ошибку?

Я новичок в андроиде, столкнулся с этой проблемой при изучении основ.

Я искал свою проблему в Google и здесь, но не могу найти похожую.

Моя проблема в том, что я не могу определить, когда ориентация экрана изменилась на альбомную.

Вот код, который я получил от здесь

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        System.out.println("orientation landscape");
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
        System.out.println("orientation potrait");
    } else{
        Toast.makeText(this, "undefined", Toast.LENGTH_SHORT).show();
        System.out.println("orientation undefined");
    }
}

    <activity android:name=".Hello2011Activity"
              android:label="@string/app_name"
              android:theme="@style/testem"
              android:configChanges="orientation"
              >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Вот журнал

07-27 16:19:11.935: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18}
07-27 16:19:12.065: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=18}
07-27 16:19:12.305: INFO/System.out(1241): orientation potrait
07-27 16:19:15.485: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/1 nav=3/1 orien=2 layout=18}
07-27 16:27:11.465: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18}
07-27 16:27:11.665: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=18}
07-27 16:27:11.885: INFO/System.out(1241): orientation potrait
07-27 16:27:14.035: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/1 nav=3/1 orien=2 layout=18}
07-27 16:27:20.401: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18}
07-27 16:27:20.675: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=18}
07-27 16:27:20.865: INFO/System.out(1241): orientation potrait

Как вы можете видеть, есть только уведомление, когда я меняю ориентацию с альбомной на портретную, а не наоборот.

Я пробовал avd 2.1update1 с уровнем API 7 и avd 2.2 с уровнем API 8. ОС — Windows XP SP 3 с eclipse 3.6.2.

Это баг или что-то не так с кодом?


person user77177928    schedule 27.07.2011    source источник
comment
Я просто смотрю, все в порядке с вашим источником. Это кажется странным поведением, не могли бы вы отправить вам полный исходный код на мою электронную почту, очень интересная проблема :)   -  person NguyenDat    schedule 27.07.2011
comment
Я также пробовал код. Метод onConfigurationChanged не выполняется в ландшафтном режиме.   -  person Mudassir    schedule 27.07.2011
comment
@nguyendat Я создаю новый проект, чтобы протестировать его, но он все равно не работает. Вот код проекта s000.tinyupload.com/index.php?file_id=64677725252486745434   -  person user77177928    schedule 28.07.2011
comment
@Mudassir Я думал, что у меня только у одного такая проблема :)   -  person user77177928    schedule 28.07.2011
comment
android:screenOrientation=портрет для активности используется, чтобы не менять ориентацию   -  person Android    schedule 28.07.2011
comment
Конечно, когда установлена ​​ориентация ландшафта, не ожидается изменения конфигурации ориентации. Однако когда экран заблокирован на некоторых телефонах и экран блокировки поворачивается, базовое приложение также поворачивается. Результатом является перезапуск действия, если оно не может обнаружить изменение ориентации.   -  person    schedule 17.06.2013


Ответы (2)


У меня та же проблема, но использование ориентация|keyboardHidden не решило ее. у кого-нибудь есть идея?

РЕДАКТИРОВАТЬ: после проб и ошибок я обнаружил, что это работает для меня:

android:configChanges="keyboardHidden|orientation|screenSize"
person yoel    schedule 28.04.2012
comment
Для справки/рекомендации другим пользователям я ссылаюсь на другой ответ стека, который (вероятно) лучше всего объясняет, почему этот код сработал для вас: stackoverflow. com/a/12226667/269876 - person Lo-Tan; 25.03.2013

activity-restart-on-rotation-android
how-do-i-detect-screen-rotation и использовать android:screenOrientation="portrait" для активности, чтобы не вносить изменения ориентации (это можно использовать с тегом активности в AndroidManifest.xml), как этот

<activity android:name="testActivity"
            android:screenOrientation="portrait" android:label="@string/app_name">

(после этого устройство не будет иметь смысла при смене ориентации)

person Android    schedule 28.07.2011
comment
Я не хочу навязывать ориентацию экрана, я просто хочу определить, изменилась ли ориентация. Но спасибо за информацию. В любом случае, я уже получил свой ответ (см. мой пост ниже), но я не знаю, как закрыть эту тему. - person user77177928; 28.07.2011