在后台检测 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 通知

在后台检测可达性

如何检测应用程序何时在后台 Swift 中强制关闭 [重复]

在 iOS 7 中检测后台应用刷新的用户设置

检测您的网站是不是在后台运行