2015-06-20 3 views
2

Я разработал приложение для чата, и проблема в том, что уведомления могут быть услышаны, даже если телефон находится в бесшумном режиме (1). Дело в том, что я хочу, чтобы уведомления воспроизводились, когда экран заблокирован (2). Я проверил все категории AVAudioSession, и кажется, что у вас может быть один из следующих вариантов:iOS/Воспроизведение аудио, когда экран заблокирован, но не когда телефон в бесшумном режиме

  • Звуки отключены, когда телефон находится в режиме молчания или заблокирован;
  • Звук включен, даже если телефон находится в тихом режиме или на экране заблокирован.

Как я могу отключить звуки при использовании телефона в бесшумном режиме, но включен, когда телефон НЕ в бесшумном режиме и экране заблокирован? Можно ли еще больше настроить AVAudioSession или (по-видимому, не может) легко обнаруживать бесшумный режим программным путем?

+0

Возможно, я могу добиться этого, используя API системных звуковых служб. Кажется, что этот API не подлежит AVAudioSession и не может переопределить переключатель звонка/без звука. Проблема в том, что этот API не такой мощный, как AVAudioPlayer. Поэтому я попытаюсь определить, можно ли воспроизводить звук с помощью System Sound Services (играя короткий чистый звук системы и проверяя время между вызовом PlaySystemSound и обратным вызовом). Если время очень маленькое, я буду знать, что я молчу и не запускаю AVAudioPlayer. Будете пытаться на следующей неделе и держать вас в курсе. – Georges

ответ

0

ОК, я исправил его. Решением было использование AudioToolbox и System Sound Services. Поведение AudioToolbox - это то, что я искал, т. Е. Он всегда уважает кольцо/тихий переключатель, однако он также может воспроизводиться в фоновом режиме или когда экран заблокирован.

Поскольку я действительно хотел использовать AVAudioPlayer, я сначала проверяю кольцо/тихий переключатель, играя короткий чистый звуковой сигнал системы (скажем, полусекундный звук). Если обратный вызов завершения выполняется менее чем за 0,15 секунды, я знаю, что я в бесшумном режиме. Если нет, я продолжаю играть и воспроизводить все звуки, которые у меня есть с AVAudioPlayer.