Обнаружение изменения ориентации экрана в OnPause()


Я использую MonoDroid, но эквивалентный ответ Java все еще может помочь.

Я использую книжный макет и ландшафтный макет, поэтому, если это возможно, я хочу использовать ориентацию экрана Android для автоматического удаления/создания действий.

Мое приложение использует TextToSpeech, поэтому в OnPause() я останавливаю его, что хорошо работает, когда нажата клавиша Home или происходит входящий вызов. Однако я не хочу останавливать TextToSpeech на изменении ориентации экрана от пользователь.

Есть ли простой способ обнаружить это изменение так, чтобы TextToSpeech не прерывалось?

Код моей деятельности OnStop():

protected override void OnPause()
{
    // I need this for Home key, intercepting phone calls, etc.
    // But how can I prevent this for a screen orientation change?
    // Need to enable screen orientation to get my portrait/landscape views
    if(Text2Speech.IsTextToSpeechInitialised && Text2Speech.TextToSpeech != null)
        Text2Speech.TextToSpeech.Stop();

    base.OnPause();
}
1 2

1 ответ:

Как другие сказали в комментариях к этому вопросу, я думаю, что вы захотите сами справиться с изменениями конфигурации здесь. Есть и другие изменения конфигурации, которые могут привести к перезапуску вашей активности, например, раскрытие аппаратной клавиатуры устройства.

В Mono для Android вы можете указать, какой из них вы хотите обрабатывать самостоятельно в ActivityAttribute:

[Activity(ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden)]
public class MainActivity : Activity