【发布时间】:2016-01-21 13:51:25
【问题描述】:
我正在构建一个音乐播放器应用程序,一切正常。到目前为止,我一直在使用系统音乐播放器,但现在想切换到使用应用程序音乐播放器,这就是我遇到问题的地方 - 对于我的生活,我无法弄清楚如何获得我的从 iOS 控制中心调用的播放/暂停回调。这是我在主视图控制器中使用的代码:
override func viewDidLoad() {
super.viewDidLoad()
self.musicPlayer = MPMusicPlayerController.applicationMusicPlayer()
self.registerForMediaPlayerNotifications()
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
let commandCenter = MPRemoteCommandCenter.sharedCommandCenter()
commandCenter.previousTrackCommand.enabled = false
commandCenter.previousTrackCommand.addTarget(self, action: "previousTrack")
commandCenter.nextTrackCommand.enabled = false
commandCenter.nextTrackCommand.addTarget(self, action: "nextTrack")
commandCenter.togglePlayPauseCommand.enabled = true
commandCenter.togglePlayPauseCommand.addTarget(self, action: "playOrPauseMusic")
commandCenter.pauseCommand.addTarget(self, action: "playOrPauseMusic")
commandCenter.pauseCommand.enabled = true
commandCenter.playCommand.addTarget(self, action: "playOrPauseMusic")
commandCenter.playCommand.enabled = true
[...]
}
func previousTrack() {
}
func nextTrack() {
}
func playOrPauseMusic() {
print("playOrPause")
}
【问题讨论】:
-
我唯一能想到的,就是当回调来临时你的对象已经不存在了。您是否将对象存储在某个地方?
-
你的意思是 commandCenter 对象?不,我不会将它存储在任何地方,因为我认为它是一些全局共享实例,我只需要引用来设置目标/启用/禁用等。我可以尝试一下...
-
不,我的意思是自我,包含此代码的对象。在它的
dealloc中放一个断点,看看它是否被清理掉了。 -
哦.. 这段代码在我的主视图控制器中。在显示此主视图时向上滑动以显示命令中心时,播放/暂停甚至不起作用,所以我想它肯定应该仍然存在。
-
使用 MPRemoteCommandCenter 时无需调用 beginReceivingRemoteControlEvents。
标签: ios swift mpmusicplayercontroller