在 iOS 5 中检测 iPhone 静音开关

Posted

技术标签:

【中文标题】在 iOS 5 中检测 iPhone 静音开关【英文标题】:Detecting iPhone mute switch in iOS 5 【发布时间】:2011-11-16 20:17:16 【问题描述】:

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

【问题讨论】:

【参考方案1】:

更新:抱歉,下面发布的代码对我来说很好,但我使用的是 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.");

【讨论】:

抱歉这个错误。它正在工作 ios5?抱歉耽搁了。

以上是关于在 iOS 5 中检测 iPhone 静音开关的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中检测铃声开关状态?

iOS 铃声开关使网络音频静音

iPhone SDK:设置音频路由并在静音开关打开时静音音频

iPhone:当铃声/静音开关从关闭模式打开时不想退出游戏

AVAudioSessionCategoryPlayAndRecord 未检测到静音开关

iOS响铃/静音开关设置为静音模式时没有声音