警报 "Sign in to iTunes Store" 和 "Battery low" 暂停我的应用程序卡住。我怎样才能取消暂停它们?
Alert "Sign in to iTunes Store" and "Battery low" pauses my apps jams. How can I unpause them?
我的应用程序中有一些音乐在 AVAudioSessionCategoryAmbient
下播放。现在我的问题是,当弹出来自 Apple 的 "Sign in to iTunes Store" 之类的弹出窗口时,它会暂停我的音乐,但不会继续播放。值得庆幸的是,它会照顾我的 SKScene
... 但不会照顾音乐。有没有什么方法可以在警报解除时进行回调?
奇怪的是,我制作的其他 UIAlertView
不会对应用程序执行此操作,所以我真的不知道发生了什么。
暂停场景和音乐的警报列表:
- 登录 iTunes
- 电池电量不足
- 确认购买
一些想法:
在播放器 rate
属性 上添加键值观察。当速率改变时(系统UIAlertController
停止音频,重新开始播放。
对于 StoreKit 事务:我相信您可以获取和设置成功或不成功 SKPaymentTransaction
状态的回调。在这些回调中,再次开始音频播放。不过,这并没有考虑电池电量不足的情况。
我前段时间遇到过类似的问题(Swift 1.2 开始)。我通过观察 SKScene 的 paused 状态解决了我的问题。 SKScene 有 SKView 类型的视图。
private var queueContext = 0
override func didMoveToView(view: SKView) {
super.didMoveToView(view)
self.view.addObserver(self,
forKeyPath: "paused",
options: .New,
context: &queueContext)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if context == &queueContext {
if let paused = change?[NSKeyValueChangeNewKey] as? Bool {
// TODO: react on paused status changes
}
}
else {
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
}
我的应用程序中有一些音乐在 AVAudioSessionCategoryAmbient
下播放。现在我的问题是,当弹出来自 Apple 的 "Sign in to iTunes Store" 之类的弹出窗口时,它会暂停我的音乐,但不会继续播放。值得庆幸的是,它会照顾我的 SKScene
... 但不会照顾音乐。有没有什么方法可以在警报解除时进行回调?
奇怪的是,我制作的其他 UIAlertView
不会对应用程序执行此操作,所以我真的不知道发生了什么。
暂停场景和音乐的警报列表:
- 登录 iTunes
- 电池电量不足
- 确认购买
一些想法:
在播放器 rate
属性 上添加键值观察。当速率改变时(系统UIAlertController
停止音频,重新开始播放。
对于 StoreKit 事务:我相信您可以获取和设置成功或不成功 SKPaymentTransaction
状态的回调。在这些回调中,再次开始音频播放。不过,这并没有考虑电池电量不足的情况。
我前段时间遇到过类似的问题(Swift 1.2 开始)。我通过观察 SKScene 的 paused 状态解决了我的问题。 SKScene 有 SKView 类型的视图。
private var queueContext = 0
override func didMoveToView(view: SKView) {
super.didMoveToView(view)
self.view.addObserver(self,
forKeyPath: "paused",
options: .New,
context: &queueContext)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if context == &queueContext {
if let paused = change?[NSKeyValueChangeNewKey] as? Bool {
// TODO: react on paused status changes
}
}
else {
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
}