ios - 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 = [:]
}
解决方案
TL;博士
Github 上的示例:https ://github.com/JakubMazur/SO52243428
你不应该分配nil
给 this nowPlayingInfo
。
你应该做的是:
- 停止播放(没有必要,但最好清理您创建的内容)
- 将您的会话设置为非活动状态
- 清除
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上找到。随意检查一下,它与您的情况相符。
推荐阅读
- python - 为什么 ColumnTransformer 不调用 fit 它的变压器?
- javascript - 如何在 React JS 中应用动画
- twitter - Social Studio Radian6 获取推文数据
- python - 无法在烧瓶中使用 monogdb 运行 docker-compose
- java - 无法从数据库中检索数据(Firebase)
- ibm-mq - 我能否在仍使用 WAS 8.5.5 的同时将我的 MQ 版本升级到 9.0?
- r - 无法对下载按钮进行条件检查
- typescript - 打字稿推断方法的错误返回?
- angular - mat-select 覆盖变换 (cdk-overlay-pane)
- python - 在 PySpark 中加入多个数据框