在iOS 5中检测iPhone静音开关

时间:2011-11-16 20:17:16

标签: iphone objective-c ios mute

我知道Apple没有提供检测 iOS 5 中iPhone mute/silence切换状态的方法。但是,我尝试了其他地方提到的技术,通过播放音频文件并测量其运行时来检测这一点。然而,即使我的iPhone被静音,音频文件仍然在整个持续时间内播放。我正在使用[AVAudioPlayer play]并计算调用audioPlayerDidFinishPlaying之前的时间。你知道播放音频文件的技巧吗?如果手机静音,它会提前/立即完成吗?

1 个答案:

答案 0 :(得分:4)

更新:抱歉,以下代码发布对我来说很好,但我使用的是iOS4。对于iOS5,这个答案将解决您的问题 - Detecting the iPhone's Ring / Silent / Mute switch using AVAudioPlayer not working?

这段代码就是您所需要的。定义全局gAudioSessionInited var。此标志会告诉您静音开关是打开还是关闭。

// "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.");
}