当用户打开静音开关时静音

Mute Sound When User Toggles Mute switch On

最近我开始在我的项目中添加音频,当你点击一个按钮时它会产生很好的声音效果但即使我的 iPhone 的静音开关打开声音仍然播放。我想知道如何检测用户是否已打开静音开关,如果是,则将应用程序的声音完全静音。

Apple 没有直接 API 了解 iPhone 上的静音模式。但是我们确实有一些解决办法。

以前的 SO 答案可以帮助您找到解决方法。

How to programmatically sense the iPhone mute switch?

来自 SO answer 的快速有效的解决方案。

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

您可能不需要实际测试静音开关是否打开,相反,只需告诉您的 AudioSession 什么类别播放模式是合适的,让 iOS 决定是否播放声音。

https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html

您需要 AVAudioSessionCategoryAmbient,这将导致应用被静音按钮静音。