我在应用程序中有一个播放器控件,该控件是控制系统音乐播放器(上一个播放/暂停下一个)。
为了显示正确的播放/暂停状态,我向MPMusicPlayerControllerPlaybackStateDidChange通知添加了一个观察者。
Apple Music App运行时,一切顺利。但是,如果我关闭Apple Music应用程序并在应用程序中按触发playPause()函数的播放按钮,则在处理新的MPMusicPlayerControllerPlaybackStateDidChange通知并尝试获取当前的播放状态后,应用程序立即崩溃。
func playPause() {
let isPlaying = MPMusicPlayerController.systemMusicPlayer.playbackState == .playing
isPlaying ? controller.pause() : controller.play()
}
处理该通知的代码:
@objc
private func onPlayBackStateChanged() {
let playbackState = MPMusicPlayerController.systemMusicPlayer.playbackState // <<< This line crashes the app
updatePlaybackState(playbackState)
}
在崩溃前不久,我收到此日志:
2020-03-25 13:46:20.471063+0200 MYAPP[405:14911] [SDKPlayback] prepareToPlay failed [no target descriptor]
2020-03-25 13:46:33.305925+0200 MYAPP[405:14911] [SDKPlayback] prepareToPlay failed [no target descriptor]
2020-03-25 13:46:41.498197+0200 MYAPP[405:15072] [SDKPlayback] systemMusicPlayer connection invalidated
此代码在iOS <13.3x上运行良好,但在iOS 13.4上无效。是来自Apple的这个新错误,还是我做错了什么?如何解决此错误?
系统音乐播放器允许您的应用充当Apple Music应用(docs)的“遥控器”。因此,当您关闭Apple Music应用程序时,您正在终止系统播放器所需的连接。
如果您想在应用程序内部本地播放音乐而不依赖于Apple Music应用程序的状态,请使用application music player。>