Итак, в моем приложении, работающем на iOS 6, со звуком все работает нормально. Я использую старый формат C API для перехвата прерываний с помощью обратного вызова; настройка через: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self)
и это было здорово. Однако с помощью iOS 7 SDK кажется, что мой обратный вызов прерывания никогда не вызывается, когда устройство получает вызовы или срабатывает будильник.
После некоторого осмотра я услышал, что старый C API устарел и что вам следует перейти на более новые функции AVAudioSession. Дальнейшее чтение показало, что делегат AVAudioSession устарел и что вы должны использовать NSNotification
для AVAudioSessionInterruptionNotification
, чтобы перехватывать прерывания и делать все, что нужно.
Мне кажется, что это уведомление на самом деле никогда не срабатывает, и поэтому меня никогда не прерывают должным образом, что затем прерывает все мои аудиоматериалы после завершения вызова.
Я подписываюсь на уведомление так:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];
На данный момент функция AudioInterruption:
просто регистрирует, что она сработала. Ни журнал, ни точки останова не срабатывают.
Чтобы было ясно, изначально воспроизведение и запись звука работают нормально. Когда происходит прерывание (например, входящий вызов или сигнал тревоги), уведомление о прерывании не запускается. Если необходимо больше окружающего кода, дайте мне знать.
AVAudioSessionInterruptionNotification
, то мой наблюдатель сработает, так что это сработает. До сих пор не понимаю, почему система не публикует само уведомление. - person Doc   schedule 11.11.2013setActive
? - person imihaly   schedule 12.11.2013[session setMode:AVAudioSessionModeVoiceChat error:&error]
и[[AVAudioSession sharedInstance] setActive:YES error:&activationError]
. Я устанавливаю режим перед добавлением наблюдателя и устанавливаю актив после этого, хотя это не должно иметь значения (?). - person Doc   schedule 12.11.2013AVAudioSessionCategoryPlayAndRecord
. Эксперименты с вариантами не дали никаких изменений независимо от выбора. - person Doc   schedule 18.11.2013