Я создаю музыкальный проигрыватель в своем приложении для iOS, используя AVPlayer
. Я прослушиваю изменения для свойства AVPlayer.status
следующим образом, чтобы узнать, когда звук будет готов к воспроизведению:
player.currentItem!.addObserver(self, forKeyPath: "status", options: .New, context: nil)
И когда статус .ReadyToPlay
я автоматически запускаю воспроизведение:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if (keyPath == "status") {
if let currentItem = self.player?.currentItem {
let status = currentItem.status
if (status == .ReadyToPlay) {
self.play()
}
}
}
}
}
Работает отлично. Проблема, однако, заключается в том, что если я начну воспроизводить музыку в своем приложении, приостановлю музыку, а затем выйду из приложения и начну воспроизводить музыку, например, в Spotify, свойство состояния AVPlayer
, похоже, снова изменится на .ReadyToPlay
в следующий раз, когда мой app выходит на передний план, что приводит к срабатыванию наблюдателя, что, в свою очередь, заставляет снова воспроизводить музыку.
Я предполагаю, что что-то происходит с экземпляром AVPlayer, когда приложение снова получает фокус, что приводит к изменению/обновлению свойства состояния.
Как предотвратить такое поведение?