AVAudioSession Interrupciones

Entonces, en mi aplicación, que se ejecuta en iOS 6, todo parece funcionar bien con el audio. Utilizo el antiguo formatting C API para detectar interrupciones utilizando una callback; configurando a través de: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self) y fue genial. Sin embargo, al usar SDK de iOS 7, parece que nunca se llama a mi callback de interrupción cuando el dispositivo recibe llamadas o se activa una alarma.

Después de mirar alnetworkingedor, escuché que el antiguo C api estaba en desuso y que debería moverse a las funciones más nuevas de AVAudioSession. Más lecturas revelaron que el delegado de AVAudioSession está en desuso y que debe utilizar la NSNotification para AVAudioSessionInterruptionNotification para detectar interrupciones y hacer lo que sea necesario.

Para mí, parece que esta notificación nunca se activa y, por lo tanto, nunca me interrumpen correctamente, lo que rompe todas mis cosas de audio después de que termine la llamada.

Me inscribo para la notificación así:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil]; 

Por ahora, la function AudioInterruption: simplemente registra que fue despedida. Ni el logging ni ningún punto de interrupción están desencadenando.

Para que quede claro, la reproducción y la grabación de audio inicialmente funcionan bien. Cuando se produce una interrupción (como una llamada entrante o una alarma), no se activa ninguna notificación de interrupción. Si es necesario más código circundante, avíseme.

¿Tiene una instancia AVCaptureSession en su aplicación?
Si ese es el caso, sugeriría la misma respuesta que recibí para mi pregunta vinculada:
Intente establecer NO en la propiedad usesApplicationAudioSession de su instancia AVCaptureSession .
Es una propiedad disponible desde iOS 7. En las versiones anteriores de iOS, cada AVCaptureSession hizo uso de una AVAudioSession privada. Desde iOS 7, las sesiones de captura utilizan la AVAudioSession de la aplicación compartida.
La propiedad usesApplicationAudioSession está habilitada de manera pnetworkingeterminada, por lo que si desea mantener el comportamiento anterior, debe desactivarlo, estableciendo NO .

Espero que esto también funcione para usted.

No pasó la instancia de AVAudioSession en su llamada addObserver como el último parámetro.

Prueba esto:

 AVAudioSession *session = [AVAudioSession shanetworkingInstance]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:session]; 

Para mí, activar la session de audio y agregar un observador cuando el usuario realmente presiona el button de reproducción ha resuelto el problema; la notificación fue despedida Creo que apple doc dice algo sobre eso aquí .