如何修改AVRoutePickerView弹出界面的元数据信息?
解决AVRoutePickerView弹窗显示旧Apple Music信息的问题
嘿,我之前也踩过这个坑!AVRoutePickerView弹出的系统路由选择窗口,其实是读取当前活跃音频会话对应的MPNowPlayingInfoCenter信息。如果它显示的是Apple Music的旧内容,大概率是你的应用还没正确抢占音频会话,或者MPNowPlayingInfoCenter的配置有遗漏。
下面是一步步的修复方案:
1. 先确保音频会话正确激活并配置
系统只会把当前激活音频会话的应用识别为“正在播放”的应用,所以第一步要在播放音频前配置并激活你的音频会话:
import AVFoundation func setupAudioSession() { do { let session = AVAudioSession.sharedInstance() // 用.playback类别确保后台也能播放,且优先级高于其他音频 try session.setCategory(.playback, mode: .default, options: []) try session.activate(options: .notifyOthersOnDeactivation) } catch { print("音频会话配置失败: \(error.localizedDescription)") } }
调用时机:建议在App启动时或者播放前立即调用,比如点击播放按钮的逻辑里先执行这个方法。
2. 正确配置MPNowPlayingInfoCenter
你的代码可能遗漏了关键信息,或者图片加载有问题。要确保设置完整的媒体元数据,并且图片能正确加载:
import MediaPlayer func updateNowPlayingMetadata() { // 先确认图片能正常加载 guard let coverImage = UIImage(named: "MyImage") else { print("⚠️ 封面图片加载失败,请检查Assets中的图片名称") return } // 使用图片本身的尺寸,避免拉伸变形 let artwork = MPMediaItemArtwork(boundsSize: coverImage.size) { _ in return coverImage } // 组装完整的播放信息,至少包含标题、封面 let nowPlayingInfo: [String: Any] = [ MPMediaItemPropertyTitle: "你的音频标题", MPMediaItemPropertyArtist: "创作者名称", MPMediaItemPropertyArtwork: artwork, MPNowPlayingInfoPropertyElapsedPlaybackTime: 0, // 当前播放进度(秒) MPMediaItemPropertyPlaybackDuration: 180 // 音频总时长(秒) ] MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo }
注意:一定要在开始播放前调用这个方法更新元数据,不要等到播放后再设置。
3. 可选但推荐:接收远程控制事件
让系统更明确地识别你的应用为当前播放应用,可以注册接收远程控制事件:
在AppDelegate或者SceneDelegate中添加:
// 注册接收远程控制事件 UIApplication.shared.beginReceivingRemoteControlEvents() // 处理远程控制事件(比如播放/暂停) override func remoteControlReceived(with event: UIEvent?) { guard let event = event, event.type == .remoteControl else { return } switch event.subtype { case .remoteControlPlay: // 执行你的播放逻辑 case .remoteControlPause: // 执行你的暂停逻辑 default: break } }
4. 测试时的注意事项
- 测试前先完全退出Apple Music,确保没有后台播放的残留会话
- 如果还是显示旧内容,可以重启你的应用或者设备,清除系统的会话缓存
- 如果你需要后台播放,记得在
Info.plist中添加UIBackgroundModes,并勾选audio选项
按照这些步骤来,AVRoutePickerView的弹窗应该就会显示你应用的音频信息了!
内容的提问来源于stack exchange,提问作者Vincent Gigandet
相关产品推荐
相关产品推荐

