我正在使用MPRemoteCommandCenter和MPNowPlayingInfoCenter来控制后台音频播放。要设置命令回调:
let commandCenter = MPRemoteCommandCenter.sharedCommandCenter()
commandCenter.pauseCommand.enabled = true
commandCenter.pauseCommand.addTarget(self, action: #selector(AudioPlayer.remoteCmdPause))
commandCenter.playCommand.enabled = true
commandCenter.playCommand.addTarget(self, action: #selector(AudioPlayer.remoteCmdplay))
更新音频数据的方式如下:
let artWork = MPMediaItemArtwork(image: image)
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [
MPMediaItemPropertyTitle: self.title,
MPMediaItemPropertyArtwork: artWork,
MPMediaItemPropertyPlaybackDuration: self.duration,
//MPNowPlayingInfoPropertyElapsedPlaybackTime: 0
]
这显示了暂停/播放按钮,我可以在remoteCmdPause和remoteCmdPlay回调中处理它。它还显示了音量条,我想要隐藏它或注册一个处理程序以便我可以对音量更改做出反应。是否可以注册回调以响应音量变化并执行除增加/减少音量之外的其他操作呢?如果不行,在后台播放音频时,是否可以从锁定屏幕中隐藏音量控制条?
init()
就会被调用了吗?但是在应用程序处于活动状态时播放音频之前,您已经设置了 AVAudioSession,对吧? - MikeGinit()
必须在应用程序进入后台之前调用。在我的情况下,我在其中一个视图控制器中创建了单例,但我相信您可以从应用程序委托中创建它,以确保提前设置音频会话并在应用程序进入后台之前配置命令。 - sigrem