Проблема решена!
Я переписал код записи, чтобы избежать этой проблемы. Я использовал AudioQueues, в основном бэкэнд-код тот же, что и в приложении SpeakHere, с некоторыми незначительными изменениями. Предусмотрено еще два API:
-(void)resume
{
AudioQueueStart(queueObject, NULL);
}
-(void)pause
{
AudioQueuePause(queueObject);
}
В классе AudioRecorder. Основная цель состоит в том, чтобы избежать настройки записи, которая выполняется в методе записи.
Настройте обратный вызов прерывания, а затем используйте соответствующие методы паузы и возобновления в обратном вызове. Также позаботьтесь о том, чтобы активировать аудио сеанс в зависимости от того, нужно ли это вашему приложению или нет.
Надеюсь, это кому-нибудь поможет.
EDIT:
Обратный вызов слушателя прерывания звука:
void interruptionListenerCallback (void *inUserData, UInt32 interruptionState)
{
if (interruptionState == kAudioSessionBeginInterruption)
{
[self.audioRecorder pause];
}
else if (interruptionState == kAudioSessionEndInterruption)
{
// if the interruption was removed, and the app had been recording, resume recording
[self.audioRecorder resume];
}
}
Прослушивание прерывания звука:
AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);