問題解決:AVAudioSessionの割り込み処理方法が無効になる


背景知識:


iOSでは、アプリの録音/再生時に、携帯電話からの電話、目覚まし時計、カレンダーイベントなど、システムが中断される可能性があります.この場合、システムは現在のオーディオ操作を中断し、appに通知を送信します.ユーザが「無視」をクリックしたり、電話を切ったりすると、音声権限がappに返され、再びappに通知が送信されます.具体的には、次のようになります.
//  interruption  
[[NSNotificationCenter defaultCenter] addObserver:self                                     selector:@selector(handleInterruption:) name:AVAudioSessionInterruptionNotification                                               object:nil];

方法では、イベントが割り込み開始であるか、割り込み終了であるかを受信し、オーディオ再生の場所を保存したり、UIを更新したりするなど、対応する操作を行うことができる.
- (void)handleInterruption:(NSNotification*)notification { NSLog(@"interruption info:%@",notification.userInfo); }

問題の説明:


設定された割り込み傍受方法が無効になる場合があり、着信/目覚まし時計などのときに傍受関数が呼び出されない.AVAudioSessionは正しい設定をしました.
AVAudioSession* session = [AVAudioSession sharedInstance];
NSError* error;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
[session setActive:YES error:&error];

問題の原因:


AVCaptureDeviceとAVCaptureSessionを使用して、録音録画操作を行うアプリもあります.App設定をチューニングし、より良い録音録画を行うためにiOS 7から、デフォルトでは、AVCaptureSessionはappのAVAudioSessionを使用し、それを修正します.これにより、設定された割り込みリスニング方法が無効になります.

解決方法:


AVCaptureSessionは、appのAVAudioSessionを使用しないように設定できます.
AVCaptureSession* captureSession = [AVCaptureSession new]; captureSession.usesApplicationAudioSession = NO;