AVAudioRecorder não está gravando em segundo plano após o término da interrupção da sessão de áudio
Estou gravando áudio no meu aplicativo, tanto em primeiro plano quanto em segundo plano. Também lida com AVAudioSessionInterruptionNotification para interromper a gravação quando a interrupção começa e começar novamente quando termina. Embora em primeiro plano funcione conforme o esperado, quando o aplicativo está gravando em segundo plano e eu recebo uma chamada, ele não inicia novamente a gravação após o término da chamada. Meu código é o seguinte:
- (void)p_handleAudioSessionInterruptionNotification:(NSNotification *)notification
{
NSUInteger interruptionType = [[[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
if (interruptionType == AVAudioSessionInterruptionTypeBegan) {
if (self.isRecording && !self.interruptedWhileRecording) {
[self.recorder stop];
self.interruptedWhileRecording = YES;
return;
}
}
if (interruptionType == AVAudioSessionInterruptionTypeEnded) {
if (self.interruptedWhileRecording) {
NSError *error = nil;
[[AVAudioSession sharedInstance] setActive:YES error:&error];
NSDictionary *settings = @{
AVEncoderAudioQualityKey: @(AVAudioQualityMax),
AVSampleRateKey: @8000,
AVFormatIDKey: @(kAudioFormatLinearPCM),
AVNumberOfChannelsKey: @1,
AVLinearPCMBitDepthKey: @16,
AVLinearPCMIsBigEndianKey: @NO,
AVLinearPCMIsFloatKey: @NO
};
_recorder = [[AVAudioRecorder alloc] initWithURL:fileURL settings:settings error:nil];
[self.recorder record];
self.interruptedWhileRecording = NO;
return;
}
}
}
Observe que fileURL aponta para o novo arquivo caf em um subdiretório NSDocumentDirectory. O áudio do modo de fundo está configurado. Eu também tentei fazer voip e tocar silêncio, ambos sem sucesso.
O NSError no bloco AVAudioSessionInterruptionTypeEnded é um erro OSStatus 560557684 que não encontrei como resolver.
Qualquer ajuda seria muito apreciada.