使用 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的主要内容,如果未能解决你的问题,请参考以下文章
无法在 iOS 中与 iPodMusicPlayer 捆绑播放歌曲