在后台模式下播放音效

时间:2010-07-16 00:51:13

标签: iphone audio background

我需要在iPhone应用程序的背景中播放一些零星的声音效果。从iOS 4中阅读和体验过的所有内容中,只要我通过将“位置”指定为背景模式运行GPS,我就可以让我的应用程序在后台运行。这确实有效。但有时我想发挥声音效果......换句话说,它不是我所看到的“连续”声音。

但应用程序正在运行,为什么我不能只使用AVAudioPlayer播放一些音效?另一个声音API会起作用吗?

GAHHH!

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"BEEP" ofType:@"aiff"];
NSURL *fileURL = [[[NSURL alloc] initFileURLWithPath: soundFilePath] autorelease];

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];

player.volume = 1.0;
[player prepareToPlay];

// play
[player play];

3 个答案:

答案 0 :(得分:0)

我认为澄清您的应用程序未在后台运行非常重要。相反,您的应用程序“处于睡眠状态”。您指定的info.plist后台进程值告诉操作系统它应该唤醒您的应用程序并允许它响应特定类型的事件。来自Apple Documentation

  

前面的每个值[audio,location,voip]都让系统知道应该在适当的时候唤醒您的应用程序以响应相关事件。

在您的情况下,您的应用程序被冻结,并且只能响应您指定的事件类型(位置或GPS)。

你没有说清楚这个代码的上下文,所以在这一点上很难告诉你为什么没有播放音频。此外,您需要确保您的应用程序在后台运行以用于指定目的。如果您使用location机制而不在应用中使用GPS,则在提交申请时可能会被拒绝。

您可能还需要参考Checklist for Supporting Multitasking以确保应用程序的结构符合其要求。

答案 1 :(得分:0)

[编辑] <击> 在这里监控GPS位置时,您有一个很好的背景播放示例:

http://www.informit.com/articles/article.aspx?p=1646438&seqNum=5

使用AudioToolbox而不是AVAudioPlayer

我设法使用 AVAudioPlayer

您是否还在密钥audio的{​​{1}}中添加了info.plist值?

答案 2 :(得分:-1)

答案是它不适用于AVAudioPlayer。请改用AudioServicesPlaySystemSound API。