我在我的应用程序中使用AVAudioEngine和AVAudioPlayerNode处理音频播放,我想实现远程控制。背景音频已配置并正常工作。
控制中心控制工作,但是当我从应用程序内部播放/暂停音乐时,播放/暂停按钮不会更新。 我正在使用真实设备进行测试。
这是我的AVAudioSession设置代码:
func setupAudioSession() {
UIApplication.shared.beginReceivingRemoteControlEvents()
do {
try AVAudioSession.sharedInstance().setActive(true)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
} catch let sessionError {
print("Failed to activate session:", sessionError)
}
}
MPRemoteCommandCenter设置:
func setupRemoteControl() {
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.isEnabled = true
commandCenter.playCommand.addTarget { (_) -> MPRemoteCommandHandlerStatus in
self.audioPlayerNode.play()
return .success
}
commandCenter.pauseCommand.isEnabled = true
commandCenter.pauseCommand.addTarget { (_) -> MPRemoteCommandHandlerStatus in
self.audioPlayerNode.pause()
return .success
}
}
锁定屏幕控制 - 从未出现过。
答案 0 :(得分:2)
所以这是我的问题的解决方案,我正在启动我的AVAudioEngine以及从viewDidLoad()
调用的设置函数,这是问题,我使用.play()
/ .pause()
方法在我的AVAudioPlayerNode上操纵音频,但 AVAudioPlayerNode不发出主音频,AVAudioEngine的outputNode确实如此。
因此,无论何时您想要从应用程序内部或从命令中心播放/暂停音频,如果您使用AVAudioEngine处理应用程序中的音频,请不要忘记致电.stop()
/ .start()
AVAudioEngine上的方法。即使没有将单个属性设置为MPNowPlayingInfoCenter.default().nowPlayingInfo
,锁屏控件也应显示,并且播放/暂停按钮应在命令中心/锁定屏幕中正确更新。
MPRemoteCommandCenter设置:
func setupRemoteControl() {
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.isEnabled = true
commandCenter.playCommand.addTarget { (_) -> MPRemoteCommandHandlerStatus in
try? self.audioEngine.start()
return .success
}
commandCenter.pauseCommand.isEnabled = true
commandCenter.pauseCommand.addTarget { (_) -> MPRemoteCommandHandlerStatus in
self.audioEngine.stop()
return .success
}
}