remoteControlReceived(带事件:UIEvent?)没有被触发

时间:2017-06-27 15:51:35

标签: ios swift headset

我有录音/播放应用程序。但是,当用户在常规有线iPhone耳机上使用播放/暂停按钮时,我想暂停播放。 所以我实现了远程事件的处理:

// MARK: Overrides
internal extension AppDelegate {
    override func remoteControlReceived(with event: UIEvent?) {
        super.remoteControlReceived(with: event)
        /* some other logic */
    }
}

然后我开始在application: didFinishLaunchingWithOptions:中接收远程事件:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    application.beginReceivingRemoteControlEvents()
    becomeFirstResponder()
    /* some other logic */
    return true
}

但无论如何remoteControlReceived(with event: UIEvent?)永远不会被触发。

我也试过MPRemoteCommandCenter:

MPRemoteCommandCenter.shared().togglePlayPauseCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
    return .success
}

没有触发。

接受Swift或objective-c答案:)

有什么问题?或者我应该在.plist中添加一些内容吗?

2 个答案:

答案 0 :(得分:1)

使用此代码完成您的工作。可以找到应用程序的文档here

MPRemoteCommandCenter.sharedCommandCenter().togglePlayPauseCommand.addTarget(self, action: #selector(togglePlayStop))
func togglePlayStop(){
    //isPlaying = !isPlaying
}

答案 1 :(得分:0)

好的,我找到了原因......我正在使用我的应用程序将其声音与其他应用混合,因此我使用mixWithOthers选项激活音频会话:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])

但是,如果我使用mixWithOthers,app会停止接收远程事件。这意味着,如果我想从耳机接收toggle play/pause事件,我就无法使用此选项:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)

这很奇怪,但这就是我们所拥有的。所以在我的情况下我不能使用耳机按钮:(