首页 > 解决方案 > iOS10+播放结束后如何从锁屏中消失播放器控件?

问题描述

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

MPNowPlayingInfoCenter.default().nowPlayingInfo = nil

播放器仍在锁定屏幕上,但艺术家/歌曲字段为空

在此处输入图像描述

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

在 AppDelegate 中:

func setupAudioSession() {

    let audioSession = AVAudioSession.sharedInstance()

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

    } catch {
        print("Setting category to AVAudioSessionCategoryPlayback failed.")
    }
}

在播放器类中:

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

标签: iosswiftavaudiosessionbackground-audio

解决方案


TL;博士

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


你不应该分配nil给 this 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 = [:]

它的行为是这样的:

在此处输入图像描述

编辑:

我写了尽可能简单的例子来尝试一下。它可以在 Github https://github.com/JakubMazur/SO52243428上找到。随意检查一下,它与您的情况相符。


推荐阅读