我正在单例中使用 AVSpeechSynthesizer
。在 iOS 8 中,当应用程序进入后台一段时间后,当它恢复时,AVSpeechSynthesizer
单例将不再说话。此问题不会发生在 iOS 7 上。
当应用进入后台时,我的日志中会显示以下消息:
AVSpeechSynthesizer Audio interruption notification: {
AVAudioSessionInterruptionTypeKey = 1;
}
我在单例的 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
可以在前台和后台正常工作,并在来电之前一直闪避其他音频。
在那一刻,说话会悄无声息地停止工作,没有任何错误。所有对象仍然存在,但委托(delegate)调用不会被调用,既不会开始也不会结束。
我注意到通过电话,我的应用会收到有关 AudioRouteChanged
的通知。因此,当发生这种情况时,我会重新创建语音设置:基本上销毁现有的 AVSpeechSynthesizer
并重新创建它。从那时起,说话将继续工作。它甚至可以在通话期间工作:)
关于ios - AVSpeechSynthesizer 在后台运行后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478999/