在后台录制并接听来电时崩溃应用程序

时间:2017-05-08 10:50:01

标签: ios objective-c

我正在使用SFSpeechRecognizer正常工作,但当录制开始时在后台继续,那时候来电应用程序崩溃了。

我正在使用此代码

 AVAudioSession *session = [AVAudioSession sharedInstance];
    NSError *error = nil;
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
    [session setMode:AVAudioUnitTypeMixer error:&error];


AVAudioFormat *format = [inputNode outputFormatForBus:0];
    [inputNode removeTapOnBus:0];

    if (inputNode != nil)
    {
        [inputNode installTapOnBus: 0 bufferSize: 8192 format: format block: ^(AVAudioPCMBuffer *buf, AVAudioTime *when)
         {
             [recognitionRequest appendAudioPCMBuffer:buf];
         }];
    }

 [audioEngine prepare];

错误由xcode生成。

failed: '!pri' (enable 1, outf< 2 ch,      0 Hz, Float32, non-inter> inf< 1 ch,  44100 Hz, Float32>)
 [central] 54:   ERROR:    [0x1af844c40] >avae> AVAudioIONodeImpl.mm:883: SetOutputFormat: required condition is false: IsFormatSampleRateAndChannelCountValid(hwFormat)

1 个答案:

答案 0 :(得分:0)

您必须响应应用程序中断以防止崩溃。 例如:包括来电等中断,

中断开始后 保存状态和上下文 更新用户界面

中断结束后 恢复状态和上下文 如果适当,请重新激活音频会话 更新用户界面

请参阅链接以获取更多信息Audio Session Programming Guide

例如,

 AVAudioSession *session=[AVAudioSession sharedInstance];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleInterruption:)
                                             name:AVAudioSessionInterruptionNotification
                                           object:session];
- (void)handleInterruption:(NSNotification *)notification{}

一旦你处理了这个特殊的用例,你就应该好好去。