当应用程序处于后台时,使用AmbientSound会话的AVAudioPlayer不会播放

如果这是在苹果文件,那么我一直无法find它 – 希望有人可以帮助:

我的应用程序偶尔会播放短audio剪辑 – 我希望将audio与其他应用程序中的audio(如iPod应用程序)混合播放,但是我也希望它在应用程序在后台运行时继续播放这些audio剪辑。

我在info.plist所需的背景模式设置中设置了“应用程序播放audio”(该应用程序也使用位置服务,因此也被设置在那里)

我的应用程序在applicationDidFinishLaunching上设置了一个audio会话:

AudioSessionInitialize (NULL,NULL,NULL,NULL); UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,sizeof (sessionCategory),&sessionCategory); AudioSessionSetActive(true); 

在我的viewWillAppear:方法在活跃的视图中,我有:

 [super viewWillAppear:animated]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; 

并在viewWillDisappear相应的事件处理程序和endReceivingRemoteControlEvents代码:正如在iOS 4中讨论:背景audio的远程控制

最后,我有一个以正常方式设置的AVAudioPlayer,可以在某些事件上播放声音

 bool successful = [avAudioPlayer play]; if(!successful) NSLog(@"did not play"); 

当应用程序在前台应用程序工作正常,并播放audio – 但是当应用程序进入后台,应用程序尝试播放声音时,[avAudioPlayer播放]的返回值是NO,声音不播放 – 切换时回到前台,audio再次开始工作。

如果当我设立会议,我反而使用

  UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 

然后audio完美地在前景和背景中播放。 但MediaPlayback不是真的这个应用程序的正确模式,因为我只是偶尔播放audio剪辑 – AmbientSound真的是我应该使用的模式。

我错过了什么? 是不是可以使用kAudioSessionCategory_AmbientSound在后台播放audio? 如果是这样,我还没有发现有关的文件中的任何东西。

必须提交一个技术支持请求到底。

根据Apple背景播放不支持AmbientSound类别 – 您必须使用MediaPlayback。

他们声称这是在文件中 – 我又看了一遍,我找不到它。

好的,使用kAudioSessionProperty_OverrideCategoryMixWithOthers可以很容易地将背景声音混合到MediaPlayback中 – 但是现在我将不得不跳过其他一些环节来复制其他AmbientSoundfunction(服从静音开关,而不是在locking时播放)。 我真的不明白为什么AmbientSound不被支持在后台播放 – 但我们去了。