AVAudioSession类别不起作用的文件指示

我有一个iOS应用程序,在某些地方有一些audio反馈,但我希望任何其他用户在后台播放的音乐可以播放。 另外,我想让我的应用程序中的audio尊重静音开关。 根据开发者文档,这个function应该全部由AVAudioSession环境类别启用。 这是我正在使用的代码:

if (!hasInitialisedAudioSession) { AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryAmbient error:NULL]; [session setActive:YES error:NULL]; hasInitialisedAudioSession = YES; } 

该代码执行得很好,它确实让应用程序听起来播放iPod音乐。 但是,它没有做的是尊重静音开关。 我已经尝试将这个代码换成类似的Caudio调用(像AudioSessionSetProperty这样的东西),而不是Objective-C的调用,但我得到了相同的结果 – 环境会话类别根本不希望尊重静音开关,尽pipe是什么该文件说,它应该做的。

有任何想法吗? 谢谢您的帮助 :)

我认为我设法解决了这个问题 – 事实certificate,这与我的应用完全无关,而是iPod应用。 我的应用程序遵循静音开关,因为它应该在iPod没有播放时,然后允许iPod播放它 – 所有我想要的行为。 但是,当iPod播放时,应用程序会停止响应静音开关,所以我认为这只是iPod对设备audio设置的一些帮助。 如果我真的想把时间花在这个上面的话,我也许可以解决这个问题,但是只要iPod在播放的时候听到静音开关,这对我来说就足够了。

编辑:要解决这个问题,只需使用此function来确定静音开关是否手动打开,如果结果是YES不发挥你的声音。 不过,如果你没有一个中央的audiopipe理器类,可能会有点痛苦。 如果苹果可以在他们的文档中发布这种行为,那将会很好。

 - (BOOL)deviceIsSilenced { #if TARGET_IPHONE_SIMULATOR // return NO in simulator. Code causes crashes for some reason. return NO; #endif CFStringRef state; UInt32 propertySize = sizeof(CFStringRef); AudioSessionInitialize(NULL, NULL, NULL, NULL); AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state); return (CFStringGetLength(state) <= 0); }