問題解決: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;