在后台检测 MPMusicPlayerController 通知
Posted
技术标签:
【中文标题】在后台检测 MPMusicPlayerController 通知【英文标题】:detect MPMusicPlayerController notifications in background 【发布时间】:2014-12-09 20:41:36 【问题描述】:我有一个用 swift 编写的音乐应用程序,我正在使用 MPMusicPlayerController.systemMusicPlayer,也尝试过 applicationMusicPlayer。
背景音乐如预期般正常播放。
当我的应用处于后台时,我需要播放状态更改通知,以便我的应用可以确定下一首要播放的歌曲。
我的 viewDidLoad 方法中有以下内容。如果我的应用程序在前台,我的方法“playbackChanged”会以所有正确的状态被调用。
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "playbackChanged",
name:MPMusicPlayerControllerPlaybackStateDidChangeNotification,
object: MPMusicPlayerController.systemMusicPlayer()
)
如果我的应用在后台,我什么也得不到。我记得使用 ios 7 并使用现在已在 iOS 8 中弃用的 iPodMusicPlayer,我会在后台正确收到这些通知。
任何想法出了什么问题?
【问题讨论】:
你有没有进一步了解这里? 【参考方案1】:在 MusicPlayer 上调用 beginGeneratingPlaybackNotifications()
似乎对我有用。
MPMusicPlayerController.systemMusicPlayer().beginGeneratingPlaybackNotifications()
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "playbackChanged",
name:MPMusicPlayerControllerPlaybackStateDidChangeNotification,
object: MPMusicPlayerController.systemMusicPlayer()
)
更新:不幸的是,MPMusicPlayerNotifications 无法在后台可靠地工作。
【讨论】:
也在后台? 我做了更多的测试,不幸的是,一旦应用程序暂停,它不会执行代码,直到再次激活。从我读过的内容来看,MPMusicPlayer 通知将无法在后台运行。现在 AVPlayer 在后台执行代码并与 iPod 库项目一起工作,但设置起来更加复杂。【参考方案2】:您是否为背景模式选项添加了音频功能? Apple documentaion
【讨论】:
以上是关于在后台检测 MPMusicPlayerController 通知的主要内容,如果未能解决你的问题,请参考以下文章
在后台检测 MPMusicPlayerController 通知