Изменение ориентации экрана Android приводит к закрытию приложения - PullRequest
1 голос
/ 01 марта 2011

У меня есть приложение, которое я настроил на отображение только в портретном режиме, установив

android:screenOrientation="portrait"

для каждого действия в манифесте.Это работает нормально, и экран моего приложения не поворачивается, когда я поворачиваю телефон.

Проблема в том, что если я запускаю приложение с телефоном в книжной ориентации, то при запуске моего первого действия (анимированный заставка)и я поворачиваю телефон в Пейзаж, пока первое действие еще выполняется, когда запускается следующее действие (оно запускается из блока finally потока первого действия), приложение будет закрыто.Это не заставляет выйти, он просто выходит на домашний экран.В LogCat нет исключений или чего-либо еще, что объясняет, почему это происходит.Экран никогда не вращается (как и не должен).Если я запускаю приложение с телефоном в альбомной ориентации, оно работает нормально.Это происходит только тогда, когда я начинаю в Книжной и поворачиваюсь в Пейзаж после.

Я пытался вставить

android:configChanges="orientation"

в каждое действие, и я также пытался

android:configChanges="orientation|keyboard|keyboardHidden|screenLayout"

Я попытался выше с и без реализации onConfigurationChanged в деятельности.Когда я это реализовал, я просто проигнорировал это (просто вызвав super.onConfigurationChanged).

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

IЭто также может произойти на оригинальном Motorola Droid, запустив приложение с открытой физической клавиатурой и запустив приложение в автомобильной док-станции.Приложение запускается, заставка запускается в книжной ориентации (даже если клавиатура открыта или телефон находится в автомобильной док-станции), но как только начинается второе действие, приложение закрывается.

Я так не думаюимеет какое-либо отношение к уничтожению Деятельности при изменении ориентации.Все мои глобальные данные хранятся в пользовательском классе приложения моего приложения, и, как я упоминал ранее, я не получаю никаких исключений, таких как нулевой указатель в случае глобального уничтожения.

Я использую оригинал Motorola Droidна Verizon с Android 2.3.2.

Ответы [ 2 ]

0 голосов
/ 18 марта 2013

Приложение закрывается при изменении ориентации, потому что вы должны предоставить определенные ресурсы в папке res

  • Например: раскладка-земля в папке res или

обрабатывать изменения во время выполнения программно

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

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
0 голосов
/ 01 марта 2011

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

//get the WindowManager Service
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
//get the orientation
int orientation = display.getOrientation();
//orientation % 2 == 0 is portrait mode,
if ((orientation % 2) != 0) (android.view.IWindowManager.Stub.asInterface(ServiceManager.getService("window"))).setOrientation(0);

Надеюсь, это сработает.

...