在iOS 5中检测iPhone静音开关

我知道Apple没有提供检测iOS 5中的iPhone mute/silence开关状态的方法。 不过,我已经尝试了其他地方提到的技术,通过播放audio文件并测量其运行时间来检测这一点。 但是,即使我的iPhone被静音,audio文件仍然播放整个持续时间。 我正在使用[AVAudioPlayer play]并计算audioPlayerDidFinishPlaying被调用之前的时间。 您是否知道播放audio文件的诀窍,如果手机静音,该文件将会尽快完成?

更新:抱歉,下面的代码发布适合我,但我使用的是iOS4。 对于iOS5这个答案是什么将解决你的问题 – 检测iPhone的环/静音/静音开关使用AVAudioPlayer不工作?

这段代码就是你需要的。 定义一个全局gAudioSessionInited var。 该标志告诉您您的静音开关是打开还是closures。

 // "Ambient" makes it respect the mute switch. Must call this once to init session if (!gAudioSessionInited) { AudioSessionInterruptionListener inInterruptionListener = NULL; OSStatus error; if ((error = AudioSessionInitialize (NULL, NULL, inInterruptionListener, NULL))) NSLog(@"*** Error *** error in AudioSessionInitialize: %d.", error); else gAudioSessionInited = YES; } SInt32 ambient = kAudioSessionCategory_AmbientSound; if (AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (ambient), &ambient)) { NSLog(@"*** Error *** could not set Session property to ambient."); }