我有录音/播放应用程序。但是,当用户在常规有线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中添加一些内容吗?
答案 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)
这很奇怪,但这就是我们所拥有的。所以在我的情况下我不能使用耳机按钮:(