我在我的应用程序中使用AVAudioEngine和AVAudioPlayerNode处理音频播放,我想实现远程控制 . 背景音频已配置并正常工作 .
控制中心控制工作,但是当我从应用程序内部播放/暂停音乐时,播放/暂停按钮不会更新 . I am testing on a real device.
这是我的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
}
}
锁屏控制 - 从未出现过 .
1 回答
所以这里是我的问题的解决方案,我正在启动我的AVAudioEngine以及从
viewDidLoad()
调用的设置函数,这就是问题,我在我的AVAudioPlayerNode上使用了.play()
/.pause()
方法来操纵音频,但AVAudioEngine的_输出节点 AVAudioPlayerNode does not emit master audio .因此,无论何时您想要从应用程序内部或从命令中心播放/暂停音频,如果您使用AVAudioEngine处理应用程序中的音频,请不要忘记在AVAudioEngine上调用
.stop()
/.start()
方法 . 即使没有将单个属性设置为MPNowPlayingInfoCenter.default().nowPlayingInfo
,也应显示锁定屏幕控件并在命令中心/锁定屏幕中正确更新播放/暂停按钮 .MPRemoteCommandCenter设置: