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



如果这是在苹果文档中,那么我一直找不到它-希望有人能帮忙:

我的应用程序偶尔播放简短的音频片段-我希望音频与iPod应用程序等其他应用程序在后台播放的音频混合-但我也希望它在应用程序后台运行时继续播放这些音频片段。

我在info.plist中的"所需背景模式"设置中设置了"应用程序播放音频"(该应用程序也在使用定位服务,因此也在其中设置)

我的应用程序在应用程序DidFinishLaunching:上设置音频会话

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

在我的视图WillAppear:方法在视图中是活动的,我有:

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

以及viewWillDisappear中相应的事件处理程序和endReceivingRemoteControlEvents代码:如iOS 4中所述:后台音频的远程控制

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

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

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

如果我在设置会话时使用

    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;

然后音频在前景和背景中完美播放。但MediaPlayback并不是这个应用程序真正合适的模式,因为我只是偶尔播放音频片段——AmbientSound确实是我应该使用的模式。

我错过了什么?是否无法使用kAudioSessionCategory_AmbientSound在后台播放音频?如果是这样的话,我在文档中没有找到任何关于它的信息。

最终不得不为此提交技术支持请求。

根据苹果的说法,AmbientSound类别不支持背景播放-你必须使用MediaPlayback。

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

好吧,所以使用kAudioSessionProperty_OverrideCategoryMixWithOthers将背景声音混合到MediaPlayback中已经足够容易了,但我现在必须跳过其他一些环节来复制其他AmbientSound功能(遵守静音开关,锁定时不播放)。我真的不明白为什么AmbientSound不支持在后台播放——但我们开始了。

相关内容

  • 没有找到相关文章

最新更新