iOS模拟器「Now Playing」锁屏界面失效问题求助(Xcode9.3+部署目标10.0)
解决iOS 10+ 下 MPNowPlayingInfoCenter 锁屏不显示的问题
嘿,我之前也碰到过iOS 10升级后MPNowPlayingInfoCenter突然失效的情况,结合你的场景(升级Xcode、调整部署目标到10.0),大概率是iOS 10开始对媒体控制的权限和配置要求变严格了,给你几个靠谱的排查和修复方向:
1. 必须先激活音频会话
iOS 10之后,不管你是播放音频还是带音频的视频,都得先激活AVAudioSession,不然MPNowPlayingInfoCenter根本不会工作。把这段代码放在你设置nowPlayingInfo之前:
import AVFoundation do { // 设置为playback模式,确保后台也能播放 try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default) try AVAudioSession.sharedInstance().activate(options: []) } catch let error { print("激活音频会话失败:\(error.localizedDescription)") }
另外,如果你的应用需要后台播放,一定要在Info.plist里开启音频后台模式——也就是给UIBackgroundModes数组添加audio项。
2. 注册至少一个远程媒体命令
iOS 10起,系统要求你至少注册一个远程控制命令(比如播放/暂停),才会在锁屏上显示媒体信息。不用写复杂逻辑,哪怕只是返回成功状态就行:
import MediaPlayer let commandCenter = MPRemoteCommandCenter.shared() // 注册播放命令 commandCenter.playCommand.addTarget { [weak self] _ in guard let self = self else { return .commandFailed } if !self.player.isPlaying { self.player.play() } return .success } // 注册暂停命令 commandCenter.pauseCommand.addTarget { [weak self] _ in guard let self = self else { return .commandFailed } if self.player.isPlaying { self.player.pause() } return .success }
3. 检查nowPlayingInfo的有效性
确保你设置的nowPlayingInfo里有必填的字段,比如MPMediaItemPropertyTitle、MPMediaItemPropertyArtist,空值或者缺少关键字段会导致系统不显示。另外,检查下self.playerItem.title.br2Sp.stripTags是不是真的返回了非空的字符串,万一处理后是空的也会出问题。
4. 统一部署目标配置
你提到因为Pods更新调整了部署目标,记得在Podfile里也明确指定platform :ios, '10.0',保证所有依赖库的部署目标和你的项目一致,避免兼容性问题。
最后验证小技巧
- 优先用真机测试!模拟器的锁屏媒体信息有时候会有延迟或者莫名的bug;
- 确保你的播放器处于正在播放的状态,锁屏信息只有在媒体播放时才会显示;
- 重启设备或模拟器,有时候缓存会导致配置不生效。
内容的提问来源于stack exchange,提问作者codelearner
相关产品推荐
相关产品推荐

