В моей основной деятельности есть код, который вносит некоторые изменения в базу данных, которые нельзя прерывать. Я делаю тяжелую работу в другом потоке и использую диалоговое окно прогресса, которое я установил как неотменяемый. Однако я заметил, что если я поверну свой телефон, он перезапустит действие, что ДЕЙСТВИТЕЛЬНО плохо для запущенного процесса, и я получаю принудительное закрытие.
Что я хочу сделать, так это программно отключить изменение ориентации экрана, пока мой процесс не завершится, после чего изменения ориентации будут включены.
android
screen-orientation
android-orientation
Кристофер Перри
источник
источник
Ответы:
Как объяснил Крис в своем ответе , позвонив
а потом
действительно работает как шарм ... на реальных устройствах!
Не думайте, что он сломан при тестировании на эмуляторе, сочетание клавиш ctrl + F11 ВСЕГДА меняет ориентацию экрана, без эмуляции движений датчиков.
РЕДАКТИРОВАТЬ: это был не лучший ответ. Как объясняется в комментариях, у этого метода есть проблемы. Настоящий ответ здесь .
источник
ActivityInfo.SCREEN_ORIENTATION_SENSOR
не соблюдает блокировку ориентации Android. Сброс ориентации наActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
делает.Ни один из других ответов не помог мне идеально, но вот что я обнаружил.
Зафиксировать ориентацию на текущую ...
Когда изменение ориентации должно быть разрешено снова, установите значение по умолчанию ...
источник
Configuration.ORIENTATION_PORTRAIT
он будет возвращен в обоих ландшафтных режимах (т.е. «нормальный» и обратный). Поэтому, если телефон находится в перевернутой альбомной ориентации, и вы установите его,ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
он перевернется вверх дном. В API 9 ActivityInfo представляетSCREEN_ORIENTATION_REVERSE_LANDSCAPE
константу, но я не вижу способа определить такую ориентацию черезConfiguration
класс.Вот более полное и современное решение, которое работает для API 8+, работает для обратной портретной и альбомной ориентации и работает на вкладке Galaxy, где «естественная» ориентация - альбомная (вызов
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
для разблокировки ориентации):источник
static
и добавить егоActivity activity
в качестве параметра.Чтобы управлять режимами обратной ориентации, я использовал этот код для исправления ориентации активности:
И снова разрешить ориентацию:
источник
Используйте
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
для фиксации текущей ориентации, будь то альбомная или книжная.Используйте
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
для разблокировки ориентации.источник
Я нашел ответ. Для этого в Activity вы можете вызвать
setRequestedOrientation(int)
одно из значений, указанных здесь: http://developer.android.com/reference/android/R.attr.html#screenOrientationПрежде чем я начал свою тему, я позвонил
setRequestedOrientation(OFF)
(OFF = носенсор), а когда поток был готов, я позвонилsetRequestedOrientation(ON)
(ON = датчик). Работает как шарм.источник
Спасибо всем. Я изменил решение Pilot_51, чтобы убедиться, что я вернулся в предыдущее состояние. Я также внес изменение для поддержки не альбомных и не портретных экранов (но не тестировал это на таком экране).
Затем восстановить его
источник
switch
хотя.источник
Вот решение, которое работает каждый раз и сохраняет текущую ориентацию (например, с использованием
Activity.Info.SCREEN_ORIENTATION_PORTRAIT
значений 0 °, но пользователь может иметь ориентацию 180 ° в качестве текущей).источник
используйте,
ActivityInfo.SCREEN_ORIENTATION_USER
если вы хотите повернуть экран, только если он включен на устройстве.источник
Это работает для меня. Решает проблему с разной "естественной ориентацией" планшета / телефона;)
источник
Я придумал решение, которое зависит от поворота дисплея, а затем определяет ориентацию устройства. Зная ориентацию, мы можем заблокировать ориентацию и отпустить ее позже, когда это необходимо. Это решение также может определить, находится ли устройство в режиме обратной альбомной ориентации.
Позже, если нам нужно освободить ориентацию, мы можем вызвать этот метод:
источник
Я думаю, что этот код легче читать.
источник
Я обнаружил, что комбинация существующих значений поворота / ориентации необходима для охвата четырех возможностей; есть значения портрет / пейзаж и естественная ориентация устройства. Скажем, естественная ориентация устройств будет иметь значение поворота 0 градусов, когда экран находится в «естественной» портретной или альбомной ориентации. Точно так же будет значение поворота 90 градусов в альбомной или портретной ориентации (обратите внимание, что это противоположно ориентации @ 0 градусов). Таким образом, значения поворота, отличные от 0 или 90 градусов, будут означать «обратную» ориентацию. Хорошо, вот код:
источник
Мне не понравились большинство ответов здесь, так как при разблокировке они установили НЕПРЕДВИДЕННОЕ, а не предыдущее состояние. ProjectJourneyman принял это во внимание, и это было здорово, но я предпочел код блокировки от Роя. Итак, моя рекомендация - это сочетание двух:
источник
Ты можешь использовать
источник
используйте эту строку кода
в вашей деятельности oncreate метод
источник