如何从后台启动AVPlayer?

5
首先,我并不是在问如何在后台播放AVPlayer。这方面已经有很多解决方案了。我的问题有些不同。
在我的应用程序中,AVPlayer正在播放一个“AVPlayerItem”数组。当最后一首歌曲播放完毕后,我会从第一首歌曲重新开始播放。当应用程序处于活动状态时,这完全正常。但是,如果我在播放歌曲时按下Home按钮并且最后一首歌曲在后台播放完毕,则播放器停止在此处,它不会重新开始播放第一首歌曲。
请问这种行为的原因以及可能的解决方法。
1个回答

3
你需要进行以下设置: enter image description here 然后,按照以下步骤进行:
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    print("AVAudioSession Category Playback OK")
    do {
        try AVAudioSession.sharedInstance().setActive(true)
         UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
        print("AVAudioSession is Active")
    } catch let error as NSError {
        print(error.localizedDescription)
    }
} catch let error as NSError {
    print(error.localizedDescription)
}

此外,要播放音频:
var backgroundMusicPlayer = AVAudioPlayer()

func playBackgroundMusic(filename: String) {
    let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil)
    guard let newURL = url else {
        print("Could not find file: \(filename)")
        return
    }
    do {
        backgroundMusicPlayer = try AVAudioPlayer(contentsOfURL: newURL)
        backgroundMusicPlayer.numberOfLoops = -1
        backgroundMusicPlayer.prepareToPlay()
        backgroundMusicPlayer.play()
    } catch let error as NSError {
        print(error.description)
    }
}

然后,主要是:
override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.becomeFirstResponder()
        UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
    }

在您的AppDelegate中,最终您将在以下位置接收事件:
override func remoteControlReceivedWithEvent(event: UIEvent?) {
        let rc = event!.subtype
        print("does this work? \(rc.rawValue)")
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接