iOS 13.4访问MPMusicPlayerController.systemMusicPlayer使应用程序崩溃

问题描述 投票:1回答:1

我在应用程序中有一个播放器控件,该控件是控制系统音乐播放器(上一个播放/暂停下一个)。

为了显示正确的播放/暂停状态,我向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的这个新错误,还是我做错了什么?如何解决此错误?

ios swift mpmusicplayercontroller
1个回答
0
投票

系统音乐播放器允许您的应用充当Apple Music应用(docs)的“遥控器”。因此,当您关闭Apple Music应用程序时,您正在终止系统播放器所需的连接。

如果您想在应用程序内部本地播放音乐而不依赖于Apple Music应用程序的状态,请使用application music player。>

© www.soinside.com 2019 - 2024. All rights reserved.