xcode swift 3锁屏遥控器无法正常工作?

时间:2016-12-21 13:39:31

标签: swift xcode class

当玩家处于活动状态并且正在播放时,我试图从锁定屏幕捕捉播放/停止/下一个/上一个用户操作,对于某些人如何不能正常工作。

在班级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")
        }
    }

和功能

enter image description here

我错过了什么?

2 个答案:

答案 0 :(得分:3)

一些事情:

  1. 您正在使用委托样式和MPRemoteCommandCenter样式的远程事件处理。选择一个,而不是两个,以查看它们是否相互冲突。 Apple建议使用MPRemoteCommandCenter样式,但如果您支持较旧的iOS版本,则可能需要坚持使用委托样式。

  2. 如果您确实选择使用委托样式,我的回忆是您必须成为第一个响应者才能开始接收远程控制事件。

  3. 无论您选择哪种类型的事件处理,您都必须在应用中播放音频,让系统知道如何将事件发送给您。锁定屏幕(或音频控制中心)应该将您的应用程序列在"正在播放"区域。

答案 1 :(得分:2)

我找到了解决方案

对于swift 3我必须添加此

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
     try! AVAudioSession.sharedInstance().setActive(true)