【发布时间】:2016-03-02 21:29:47
【问题描述】:
我在后台播放文字转语音时遇到间歇性(啊啊!)问题,由 Apple Watch 触发。我已经正确设置了后台模式、AVSession 类别和 WatchKitExtensionRequest 处理程序。 (见下文。)我以前做过这个工作,但不知道发生了什么变化。 (会不会是 iOS 9 有问题?“之前”是指 iOS 8 等。)
问题是这样的:当应用程序从 Watch 获得请求并且应用程序处于后台或手机处于睡眠状态(锁定)时,语音有时会立即播放,并且 其他时候在应用程序被带到前台之前不会播放。操作系统似乎有时会排队音频,有时不会。我在成功和失败案例之间找不到任何共同点。我可以通过记录来验证对 speakUtterance() 的调用是在 all 情况下进行的。但它的行为各不相同,显然是随机的。唯一的线索是,可能应用在后台的时间越长,立即说话的可能性就越小。
这让我把头发拉出来。欢迎提出建议。
在 info.plist 中:
所需的背景模式:应用使用 AirPlay 播放音频或流式传输音频/视频
在 AppDelegate.application:didFinishLaunching:withOptions():
do {
try AVAudioSession.sharedInstance().setCategory(
AVAudioSessionCategoryPlayback,
withOptions:.DuckOthers
)
try AVAudioSession.sharedInstance().setActive(true)
} catch let error as NSError {
// etc...
}
在 AppDelegate.application:handleWatchKitExtensionRequest...():
var bgTaskId:UIBackgroundTaskIdentifier = 0
bgTaskId = application.beginBackgroundTaskWithName(
"Prose WKE handler",
expirationHandler: {
application.endBackgroundTask(bgTaskId)
}
)
//... Post notification to call Text-to-Speech
application.endBackgroundTask(bgTaskId)
【问题讨论】:
-
虽然是通过推送通知启动的,但我也遇到了同样的问题。但我肯定会试试你的话:)
-
祝你好运!我最近没有检查是否不再需要它。我怀疑这是苹果的错误。让我知道它是如何为您工作的。
标签: ios audio text-to-speech background-process