AVAudioSession Interruptions

Donc, dans mon application, fonctionnant sur iOS 6, tout semble fonctionner correctement avec l'audio. J'utilise l'ancien format de l'API C pour intercepter les interruptions à l'aide d'un callback; mise en place via: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self) et c'était génial. En utilisant iOS 7 SDK cependant, il semble que mon callback d'interruption n'est jamais appelé lorsque l'appareil reçoit des appels ou une alarme se triggers.

Après avoir regardé autour, j'ai entendu que les anciens C api étaient obsolètes et que vous deviez passer aux nouvelles fonctions AVAudioSession. Plus de lecture a révélé que le délégué AVAudioSession est obsolète et que vous devez utiliser le NSNotification pour AVAudioSessionInterruptionNotification pour intercepter les interruptions et faire tout ce qui doit être fait.

Pour moi, il semble que cette notification n'est jamais réellement déclenchée et donc je ne suis jamais correctement interrompu, ce qui casse alors tous mes trucs audio après la fin de l'appel.

Je m'inscris pour la notification comme ceci:

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

Pour l'instant, la fonction AudioInterruption: enregistre simplement qu'elle a été déclenchée. Ni le journal ni les points d'arrêt ne sont déclenchés.

Pour être clair, la lecture et l'logging audio initialement fonctionnent bien. Lorsqu'une interruption se produit (comme un appel entrant ou une alarme), aucune notification d'interruption n'est envoyée. Si plus de code environnant est nécessaire, faites le moi savoir.

Avez-vous une instance AVCaptureSession dans votre application?
Si tel est le cas, je suggérerais la même réponse que j'ai reçue pour ma question liée:
Essayez de définir NO à la propriété usesApplicationAudioSession de votre instance AVCaptureSession .
C'est une propriété disponible depuis iOS 7. Dans les versions précédentes d'iOS, chaque AVCaptureSession utilisait une AVAudioSession privée. Depuis iOS 7, les sessions de capture utilisent l'AVAudioSession de l'application partagée.
La propriété usesApplicationAudioSession est activée par défaut. Par conséquent, si vous souhaitez conserver l'ancien comportement, vous devez le désactiver en définissant NO .

J'espère que cela fonctionnera pour vous aussi.

Vous n'avez pas transmis l'instance AVAudioSession dans votre appel addObserver en tant que dernier paramètre.

Essaye ça:

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

Pour moi, l'activation de la session audio et l'ajout d'un observateur lorsque l'user appuie réellement sur le button de lecture a résolu le problème; notification a été renvoyée. Je pense que Apple Doc dit quelque chose à ce sujet ici .