我试图在播放器处于事件状态并播放时从锁定屏幕捕获播放/停止/下一个/上一个用户操作,但由于某些原因它无法正常工作。
内部类 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")
}
}
和能力
我错过了什么?
最佳答案
一些事情:
您同时使用了委托(delegate)样式和 MPRemoteCommandCenter 样式的远程事件处理。选择一个,而不是两个,看看它们是否冲突。 Apple 建议使用 MPRemoteCommandCenter 样式,但如果您支持较旧的 iOS 版本,则可能需要坚持使用委托(delegate)样式。
如果您确实选择使用委托(delegate)样式,我记得您还必须成为第一响应者才能开始接收远程控制事件。
无论您选择哪种事件处理方式,您都必须在您的应用中播放音频,让系统知道将事件路由给您。锁定屏幕(或音频控制中心)应将您的应用列在“正在播放”区域中。
关于swift - xcode swift 3 锁屏 Remote 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264141/