gpt4 book ai didi

iOS MPMusicPlayerController 歌曲更改通知没有歌曲对象

转载 作者:行者123 更新时间:2023-11-30 10:58:52 29 4
gpt4 key购买 nike

我正在开发一个应用程序,用于监听 MPMusicPlayerController 的歌曲变化。

为此,我添加以下观察者:

NotificationCenter.default
.addObserver(self,
selector: #selector(systemSongDidChange(_:)),
name: .MPMusicPlayerControllerNowPlayingItemDidChange,
object: nil)

问题是,当通知被触发时,可以在 (notification?.object as? MPMusicPlayerController)!.nowPlayingItem 处找到的 nowPlayingItem 始终为

我是否做错了什么,或者是否必须采取一些特殊技巧来检索实际的 nowPlayingItem

这是更完整的代码:

// ...
init() {
let systemPlayer = MPMusicPlayerController.systemMusicPlayer

NotificationCenter.default.addObserver(self,
selector: #selector(systemSongDidChange(_:)),
name: .MPMusicPlayerControllerNowPlayingItemDidChange,
object: systemPlayer)

player.beginGeneratingPlaybackNotifications()
}

private func systemSongDidChange(notification: Notification) {
let currentSong = (notification.object as? MPMusicPlayerController)?.nowPlayingItem
// `currentSong` is always `nil` =/
}
// ...
<小时/>

我使用的播放器是Apple 的音乐播放器。我没有播放来自云端的歌曲。

最佳答案

您需要在通知中设置该对象,才能获取 nowPlayingItem

代码应如下所示:

private let playerController = MPMusicPlayerController.applicationMusicPlayer

NotificationCenter.default.addObserver(
self,
selector: #selector(systemSongDidChange(_:)),
name: .MPMusicPlayerControllerNowPlayingItemDidChange,
object: playerController
)

然后您应该能够在 systemSongDidChange 函数中像这样访问 nowPlayingItem:

func systemSongDidChange(_ notification: Notification) {
guard let playerController = notification?.object as? MPMusicPlayerController else {
return
}
let item = playerController.nowPlayingItem
}

关于iOS MPMusicPlayerController 歌曲更改通知没有歌曲对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53635537/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com