在iOS10 +中完成播放后,如何从锁定屏幕上消失播放器控件?

Max*_*Max 2 ios avaudiosession background-audio swift

在后台模式下播放音频时,播放器控件会出现在锁屏上。音频停止后如何将其删除?如果尝试设置:

MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
Run Code Online (Sandbox Code Playgroud)

播放器仍在锁定屏幕上,但歌手/歌手字段为空

在此处输入图片说明

UPD(我的音频会话代码):

在AppDelegate中:

func setupAudioSession() {

    let audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.setCategory(AVAudioSessionCategoryPlayback)
        try audioSession.setActive(true)

    } catch {
        print("Setting category to AVAudioSessionCategoryPlayback failed.")
    }
}
Run Code Online (Sandbox Code Playgroud)

在播放器类中:

private func clearRemotePlayerInfo() { // call after stop button pressed
    try? AVAudioSession.sharedInstance().setActive(false)
    MPNowPlayingInfoCenter.default().nowPlayingInfo = [:]
}
Run Code Online (Sandbox Code Playgroud)

Jak*_*kub 7

TL; DR

Github上的示例:https://github.com/JakubMazur/SO52243428


您不应该分配nil给这个nowPlayingInfo。

为此,您应该做的是:

  1. 停止播放(这不是必需的,但清理创建的内容会很好)
  2. 将会话设置为非活动状态
  3. 明确 nowPlayingInfo

因此代码如下所示:

self.player?.stop() // Where self.player is AVAudioPlayer
try? self.session?.setActive(false, with: .notifyOthersOnDeactivation) // Where self.session is AVAudioSession. You should do it with do-catch to good error catching.
MPNowPlayingInfoCenter.default().nowPlayingInfo = [:]
Run Code Online (Sandbox Code Playgroud)

它的行为将如下所示:

在此处输入图片说明

编辑:

我已经写了尽可能简单的示例进行尝试。它的问世在Github https://github.com/JakubMazur/SO52243428。随时检查一下,它与您的情况相符。