使用 iPodMusicPlayer 而不在后台控制 iPod

Posted

技术标签:

【中文标题】使用 iPodMusicPlayer 而不在后台控制 iPod【英文标题】:Using iPodMusicPlayer without giving control to iPod in background 【发布时间】:2011-04-07 16:10:33 【问题描述】:

我正在开发一个应用程序,它非常专注于在选定的播放列表中随机播放歌曲。当应用程序启动时,它列出了所有用户的播放列表,然后选择一个人将其加载到我的音乐播放器视图并获得进展。我正在使用 MPMusicPlayerController iPodMusicPlayer 来处理这个问题,因为我在 ios 开发方面还很陌生,它可以处理后台和一切对我来说都很好而且很容易的事情。我希望音乐继续在后台播放,我喜欢我在应用程序中所做的任何更改也反映在 iPod 应用程序中。但是,我不希望用户能够更改 iPod 应用程序中的内容,然后返回我的应用程序。由于我的应用程序都是关于随机播放的,用户可以轻松地进入 iPod 并禁用随机播放,然后再回到我的应用程序,体验就被破坏了。我也不希望他们更改 iPod 中的播放列表。

谁能帮我想出一个方法来完成这个?在 iPod 中播放/暂停/跳过/上一个/音量是没有问题的(我希望这是可能的),但我不希望更改歌曲队列成为可能。有没有办法在我的应用程序中添加一个处理程序,如果用户在我的应用程序处于后台时更改了某些内容(如果是这样,停止音乐并将我的应用程序重置为初始屏幕)?我真的很感激任何建议。在我冒险使用 AVPlayerQueue 或类似的东西之前,我希望这样的事情是可能的(作为旁注,你能用 AVPlayerQueue 播放 DRM 文件吗?)。

【问题讨论】:

【参考方案1】:

我要做的是在后台设置一个布尔值:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setBool:YES forKey:@"BACKGROUNDED"];

然后,在您应该实现的MPMusicPlayerControllerNowPlayingItemDidChangeNotification 处理程序中,执行以下操作:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if ([prefs boolForKey:@"BACKGROUNDED"]) 
    [prefs setBool:NO forKey:@"BACKGROUNDED"];
    exit(0);

这可能太突然了,这取决于它何时检查此代码(我不知道它何时在您的项目中进行),但这应该可以实现您的目标。 exit(0) 是在不引发异常的情况下终止您的应用程序的方法。这有帮助吗?

【讨论】:

您也可以只使用applicationMusicPlayer 而不是iPodMusicPlayer 以不允许他们更改iPod 中会影响您的应用的设置。

以上是关于使用 iPodMusicPlayer 而不在后台控制 iPod的主要内容,如果未能解决你的问题,请参考以下文章

获取 iPodMusicPlayer 的队列

无法在 iOS 中与 iPodMusicPlayer 捆绑播放歌曲

SAP AS02 怎样后台强控成本中心

奇数条件后 iPodMusicPlayer 播放状态不准确

更新位置,而后台应用程序在模拟器上工作但不在设备上(iOS 9)

云控后台系统 经验总结(表单和文件上传等)