【发布时间】:2017-01-05 17:32:39
【问题描述】:
我正在使用 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。稍后我在单例上调用一个配置函数来启用命令和设置回调(上面的第一组行)。nowPlayingInfo的初始值也在配置期间设置(第二组行)。nowPlayingInfo之后可以根据需要定期更新。 IE。在音频播放开始之前设置音频会话并配置回调。 -
那么当应用程序进入后台时,此时会调用
init()吗?但是在应用处于活动状态时播放音频之前,您不是已经设置了 AVAudioSession 吗? -
必须在应用进入后台之前调用
init()。在我的情况下,我在我的一个视图控制器中创建了单例,但我相信您可以从应用程序委托创建它,以确保提前设置音频会话并在应用程序进入后台之前配置命令。 -
好的,我明白了,但由于某种原因,我仍在为此苦苦挣扎,如果您有时间可以看看my question here,我只是不明白为什么这不起作用。谢谢