В моей основной деятельности есть некоторый код, который вносит некоторые изменения в базу данных, которые не должны прерываться. Я делаю тяжелую работу в другом потоке и использую диалог прогресса, который я установил как неотменяемый. Тем не менее, я заметил, что если я поворачиваю свой телефон, он перезапускает действие, которое ДЕЙСТВИТЕЛЬНО плохо для запущенного процесса, и я получаю Force Close.
То, что я хочу сделать, это программно отключить изменения ориентации экрана, пока мой процесс не завершится, в это время изменения ориентации разрешены.
Как объяснил Крис в своем самоответе, вызов
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
, а затем
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
действительно работает как шарм... на реальных устройствах!
Не думайте, что он сломан при тестировании на эмуляторе, сочетание клавиш ctrl+F11 ВСЕГДА меняет ориентацию экрана, без эмуляции движений датчиков.
РЕДАКТИРОВАТЬ: это был не лучший ответ. Как объясняется в комментариях, с этим методом есть проблемы. Настоящий ответ здесь.
Я нашел ответ. Для этого в Activity вы можете вызвать setRequestedOrientation(int)
с одним из указанных здесь значений: http://developer.android.com/reference/android/R.attr.html #screenOrientation
Перед тем, как начать тему, я вызвал setRequestedOrientation(OFF)
(OFF = nosensor), а когда тема была завершена, я вызвал setRequestedOrientation(ON)
(ON = датчик ). Работает как шарм.