当玩家处于活动状态并且正在播放时,我试图从锁定屏幕捕捉播放/停止/下一个/上一个用户操作,对于某些人如何不能正常工作。
在班级MusicPlayerViewController: BaseViewController
override func viewDidLoad() {
super.viewDidLoad()
do {
UIApplication.shared.beginReceivingRemoteControlEvents()
print("bb> Receiving remote control events\n")
} catch {
print("bb> Audio Session error.\n")
}
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.addTarget(self, action: #selector(MusicPlayerViewController.nextTrackCommandSelector))
}
func nextTrackCommandSelector()
{
print("omg")
}
在日志中我只能看到
bb> Receiving remote control events
也在AppDelegate.swift
里面
override func remoteControlReceived(with event: UIEvent?) {
print("remote::")
guard let event = event else {
print("no event\n")
return
}
guard event.type == UIEventType.remoteControl else {
print("received other event type\n")
return
}
switch event.subtype {
case UIEventSubtype.remoteControlPlay:
print("received remote play\n")
case UIEventSubtype.remoteControlPause:
print("received remote pause\n")
case UIEventSubtype.remoteControlTogglePlayPause:
print("received toggle\n")
case UIEventSubtype.remoteControlNextTrack:
print("clicked next \n")
case UIEventSubtype.remoteControlPreviousTrack:
print("clicked Prev \n")
default:
print("received \(event.subtype) which we did not process\n")
}
}
和功能
我错过了什么?
答案 0 :(得分:3)
一些事情:
您正在使用委托样式和MPRemoteCommandCenter样式的远程事件处理。选择一个,而不是两个,以查看它们是否相互冲突。 Apple建议使用MPRemoteCommandCenter样式,但如果您支持较旧的iOS版本,则可能需要坚持使用委托样式。
如果您确实选择使用委托样式,我的回忆是您必须成为第一个响应者才能开始接收远程控制事件。
无论您选择哪种类型的事件处理,您都必须在应用中播放音频,让系统知道如何将事件发送给您。锁定屏幕(或音频控制中心)应该将您的应用程序列在"正在播放"区域。
答案 1 :(得分:2)
我找到了解决方案
对于swift 3我必须添加此
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
try! AVAudioSession.sharedInstance().setActive(true)