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

iOS 16/17 下 MPMusicPlayerController nowPlayingItem 无法切换歌曲问题求助

iOS 16/17 下 MPMusicPlayerController nowPlayingItem 无法切换歌曲问题求助

最近翻出自己几年前的旧App,发现个头疼的问题:MPMusicPlayerController的nowPlayingItem现在没法切换歌曲了!1-2年前这段代码明明运行正常,但在iOS 16和17上彻底失效。更麻烦的是这个功能只能在真机上测试,而我手头已经没有iOS 15的设备了,调试起来特别费劲。我试过各种写法调整,都没用,而且查官方文档,我的实现看起来完全符合要求。

我写了个测试代码,逻辑是先播放第一首歌,3秒后切换到第二首,但实际只有第一首能正常播放,切换的时候控制台会抛出两个错误:

Attempted to register account monitor for types client is not authorized to access: {(
"com.apple.account.iTunesStore"
)}

Failed to set now playing item error=<MPMusicPlayerControllerErrorDomain.5 "Unable to play item <MPConcreteMediaItem: 0x9e9f0ef70> 206357861099970620" {}>

补充下背景:测试用的歌曲都在本地已下载的播放列表里,我是Apple Music订阅用户——这些条件和几年前代码正常运行时完全没变。

下面是我的测试代码:

import MediaPlayer

class Test {

    let player = MPMusicPlayerController.applicationMusicPlayer

    init() {
        let myPlaylistsQuery = MPMediaQuery.playlists()
        let playlists = myPlaylistsQuery.collections!.filter { $0.items.count > 2}
        let playlist = playlists[0]
        
        let songOne = playlists[0].items[0]
        let songTwo = playlists[0].items[1]
        
        player.setQueue(with: playlist)
        play(songOne)
        
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.play(songTwo)
        }
    }

    private func play(_ song: MPMediaItem) {
        player.stop()
        player.nowPlayingItem = song
        player.prepareToPlay()
        player.play()
    }
}

备注:内容来源于stack exchange,提问作者Richard Witherspoon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:39:34