ios – AVSpeechSynthesizer在后台运行后停止工作

我在单身人士中使用AVSpeechSynthesizer.在iOS 8中,当应用程序被搁置一段时间后,当它恢复AVSpeechSynthesizer时,单例将不再说话. iOS 7上不会发生此问题.

当应用程序变为后台时,我的日志中会显示以下消息:

AVSpeechSynthesizer Audio interruption notification: {
    AVAudioSessionInterruptionTypeKey = 1;
}

我在singleton的init方法中初始化了AVSpeechSynthesizer:

self.speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
    self.speechSynthesizer.delegate = self;

我说这样的话语:

AVSpeechUtterance *utt = [[AVSpeechUtterance alloc] initWithString:dialogue];
utt.voice = [AVSpeechSynthesisVoice voiceWithLanguage:voice];

utt.pitchMultiplier = pitch;
utt.rate = rate;
utt.preUtteranceDelay = preDelay;
utt.postUtteranceDelay = postDelay;
utt.volume = volumeSetting;

[self.speechSynthesizer speakUtterance:utt];

iOS 8上有没有人见过这样的东西?

解决方法

我整天都在追逐这种疯狂,我想我找到了解决办法.我的问题是,AVSpeechSynthesizer在前台后台工作正常,可以正常播放其他音频,直到通话结束.

那一刻,说话会地停止工作,没有任何错误.所有对象仍然存在,但委托调用不会被调用,无论是开始还是完成.

我注意到通过电话,我的应用程序会收到有关AudioRouteChanged的通知.因此,当发生这种情况时,我会重新创建语音设置:基本上销毁现有的AVSpeechSynthesizer并重新创建它.从那时起,演讲将继续发挥作用.它甚至可以在通话期间工作:)

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...