You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS音频应用锁屏与控制中心未正确显示播放信息求助

iOS音频应用锁屏/控制中心信息不显示问题排查

问题描述

使用SwiftUI、AVFoundation、MediaPlayer和ActivityKit开发iOS音频播放应用,PlayAudioService类负责音频播放、后台播放、锁屏控制及播放信息更新。应用可正常后台播放,但锁屏和控制中心始终无法正确显示播放信息或控制按钮。日志确认updateNowPlayingInfo()已调用,且MPNowPlayingInfoCenter的nowPlayingInfo字典包含预期值,但界面无更新。

相关代码

func updateNowPlayingInfo() {
    print("Updating playback info")
    DispatchQueue.main.async {
        if let player = self.player {
            var nowPlayingInfo = [String: Any]()
            nowPlayingInfo[MPMediaItemPropertyTitle] = self.trackTitle
            nowPlayingInfo[MPMediaItemPropertyArtist] = "Artist Name"
            nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = player.duration
            nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = player.currentTime

            if let albumArt = self.albumArt {
                let artwork = MPMediaItemArtwork(boundsSize: albumArt.size) { _ in
                    return albumArt
                }
                nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
            }

            MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
            print(MPNowPlayingInfoCenter.default().nowPlayingInfo ?? "No Now Playing Info")
        }
    }
}

日志验证(数据已正确设置)

[
  "MPNowPlayingInfoPropertyElapsedPlaybackTime": 51.41918367346939,
  "artist": "Artist Name",
  "artwork": <MPMediaItemArtwork: 0x3039f7560>,
  "playbackDuration": 728.6668027210884,
  "title": "84ABB1F1-AA30-45A1-BEE9-B22363EE79D2.mp3"
]

排查与解决方法

1. 未注册远程控制事件

iOS要求音频应用主动注册远程控制事件,否则锁屏/控制中心控件无法生效,也会影响信息显示。在播放启动时添加:

UIApplication.shared.beginReceivingRemoteControlEvents()

停止播放或应用退后台时,记得调用:

UIApplication.shared.endReceivingRemoteControlEvents()

2. 音频会话配置不完整

即使能后台播放,不完整的音频会话配置会导致系统无法正确识别播放状态。初始化时确保配置正确:

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
    try session.setActive(true)
} catch {
    print("音频会话配置失败: \(error)")
}

同时检查Info.plist中已添加UIBackgroundModes并勾选audio项。

3. MPMediaItemArtwork初始化方式兼容问题

iOS 13+推荐使用image:初始化器,闭包方式在部分场景下无法正确渲染。修改artwork创建代码:

if let albumArt = self.albumArt {
    let artwork = MPMediaItemArtwork(image: albumArt)
    nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
}

4. 未同步播放状态给系统

播放状态(播放/暂停/进度)变更时,需主动通知系统:

  • 切换播放/暂停时:
    MPNowPlayingInfoCenter.default().playbackState = player.isPlaying ? .playing : .paused
    
  • 进度更新时,同步播放速率:
    nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = player.rate
    

5. ActivityKit抢占优先级

若使用Live Activity,可能抢占锁屏媒体控件优先级。可在播放时暂时隐藏Live Activity,或调整其配置确保媒体播放优先级更高。

6. 系统缓存或环境问题

  • 重启测试设备,清除系统媒体信息缓存。
  • 确保测试设备iOS版本与开发SDK版本匹配,旧版系统对MPNowPlayingInfoCenter更新逻辑有差异。

内容的提问来源于stack exchange,提问作者Mango Cat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:23:23