使用 MPMusicPlayerController 时无法修改 MPRemoteCommandCenter 操作
Posted
技术标签:
【中文标题】使用 MPMusicPlayerController 时无法修改 MPRemoteCommandCenter 操作【英文标题】:Can't Modify MPRemoteCommandCenter Actions when using MPMusicPlayerController 【发布时间】:2015-03-20 14:03:18 【问题描述】:我的应用使用MPMusicPlayerController.systemMusicPlayer()
播放音频,效果很好。
用户可以设置自定义currentPlaybackRate
。这按预期工作。
如果用户在锁定屏幕上按下操作(MPRemoteCommandCenter
),currentPlaybackRate
将重置为 1。这是因为事件直接发送到系统音乐播放器,而不是应用控制器。
为了将currentPlaybackRate
设置为正确的值,我尝试覆盖MPRemoteCommandCenter
事件:
override func viewDidLoad()
super.viewDidLoad()
AVAudiosession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "willEnterForeground:", name: UIApplicationWillEnterForegroundNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playbackStateChanged:", name: MPMusicPlayerControllerPlaybackStateDidChangeNotification, object: player)
player.beginGeneratingPlaybackNotifications()
let rcc : MPRemoteCommandCenter = MPRemoteCommandCenter.sharedCommandCenter()
rcc.playCommand.addTargetWithHandler (event: MPRemoteCommandEvent!) -> MPRemoteCommandHandlerStatus in
NSLog("Lock Screen Play Pressed")
return MPRemoteCommandHandlerStatus.Success
rcc.togglePlayPauseCommand.addTargetWithHandler (event: MPRemoteCommandEvent!) -> MPRemoteCommandHandlerStatus in
NSLog("Lock Screen Play/Pause Pressed")
return MPRemoteCommandHandlerStatus.Success
MPRemoteCommandCenter
在使用MPMusicPlayerController
时是否应该尊重addTargetWithHandler
?
【问题讨论】:
这个问题你解决了吗? 我有另一个分支,我已将MPMusicPlayerController
完全替换为 AVAudioPlayer
。它可以工作,但意味着你的控制器需要处理更多的逻辑。
【参考方案1】:
如果您真的不需要 MPMusicPlayerController,请尝试使用此解决方案 https://github.com/gangverk/GVMusicPlayerController 这家伙结合了 AVAudioPlayer 和 MPMusicPlayerController 的行为。
但我确实需要一个答案。因为在我的应用中我真的需要 MPMusicPlayerController。
【讨论】:
以上是关于使用 MPMusicPlayerController 时无法修改 MPRemoteCommandCenter 操作的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)