我正在使用let player = MPMusicPlayerController.systemMusicPlayer()
作为播放器。
这是复制此问题所需的全部代码:
import UIKit
import MediaPlayer
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let player = MPMusicPlayerController.systemMusicPlayer()
player.beginGeneratingPlaybackNotifications()
player.setQueueWithStoreIDs(["401187194"])
player.play()
NotificationCenter.default.addObserver(
self,
selector: #selector(now_playing_item_changed),
name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange,
object: nil)
}
func now_playing_item_changed(_ notification: Notification){
NSLog("CALLED")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
只需启动一个新的视图swift应用程序并使用上面的代码填充ViewController.swift文件。它只适用于您拥有苹果音乐订阅。你可以用setQueueWithStoreIDs
换取其他东西,让它在不拥有苹果音乐的情况下运作。
除了问题之外,当我启动应用程序时,通知会被抛出2-4次,每当歌曲结束或更改时,它都会被抛出两次。
我不知道在没有一些hacky编码的情况下区分这两个调用的正确方法(比如计算调用等)。
有谁知道为什么这些通知会被抛出两次,或者如何以理智的方式区分这些通知?