警报“登录iTunes Store”和“电池电量不足”会暂停我的应用程序卡纸。我怎样才能取消它们?

时间:2016-04-18 06:37:05

标签: ios iphone swift avaudioplayer

我的应用中有一些音乐在AVAudioSessionCategoryAmbient下播放。现在我的问题是,当Apple弹出一个像“登录iTunes Store”的弹出窗口时,它会暂停我的音乐,但不会恢复它。值得庆幸的是,它会照顾我的SKScene ...而不是音乐。是否有某种方法可以在警报被取消时进行回调?

奇怪的是,我所做的其他UIAlertView不会对应用程序执行此操作,所以我真的不知道是什么。

暂停场景和音乐的提醒列表:

  • 登录itunes
  • 电量不足
  • 确认购买

2 个答案:

答案 0 :(得分:4)

我之前有过类似的问题(Swift 1.2的开头)。我通过观察SKScene的暂停状态解决了我的问题。 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)
    }
}

答案 1 :(得分:2)

一些想法:

在玩家的rate属性中添加键值观察。当费率更改时(系统UIAlertController停止音频,再次开始播放。

对于StoreKit事务:我相信您可以为成功或不成功的SKPaymentTransaction状态获取和设置回调。在这些回调中,再次开始音频播放。但这并不能说明电池电量不足的情况。