Então, no meu aplicativo, executando no iOS 6, tudo parece funcionar bem com o áudio. Eu uso o formato da API antiga C para capturar interrupções usando um retorno de chamada; Configurando via: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self)
E foi ótimo. Usando o iOS 7 SDK, parece que meu retorno de chamada de interrupção nunca é chamado quando o dispositivo recebe chamadas ou um alarme dispara.
Depois de alguns olhando em volta, ouvi dizer que a antiga API do C foi depreciada e que você deve se mudar para as novas funções de Avaudiosession. Mais leitura revelou que o delegado da Avaudiossession está depreciado e que você deve usar o NSNotification
por AVAudioSessionInterruptionNotification
para capturar interrupções e fazer o que precisar ser feito.
Para mim, parece que essa notificação nunca é realmente demitida e, portanto, nunca sou interrompida adequadamente, o que quebra todas as minhas coisas de áudio depois que a chamada terminar.
Eu me inscrevo para a notificação assim:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];
Por enquanto, o AudioInterruption:
A função simplesmente registra que foi demitida. Nem o log nem os pontos de interrupção estão acionando.
Para ficar claro, inicialmente a reprodução e a gravação de áudio funcionam bem. Quando ocorre uma interrupção (como uma chamada de entrada ou alarme), nenhuma notificação de interrupção é disparada. Se for necessário mais código circundante, me avise.