AudioSessionGetProperty 已弃用,如何知道设备已静音

Posted

技术标签:

【中文标题】AudioSessionGetProperty 已弃用,如何知道设备已静音【英文标题】:AudioSessionGetProperty deprecated, how to know device is silenced 【发布时间】:2014-04-14 11:56:44 【问题描述】:

我正在尝试检测用户的设备是否静音(手机侧面的按钮)。 我发现这种方法可以检测到这一点,但 ios7 中不推荐使用 AudioSessionGetProperty。

- (BOOL)deviceIsSilenced     
    CFStringRef state;
    UInt32 propertySize = sizeof(CFStringRef);
    OSStatus audioStatus = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
    if (audioStatus == kAudioSessionNoError) 
        NSLog(@"audio route: %@", state) // "Speaker" regardless of silent switch setting, but "Headphone" when my headphones are plugged in
        return (CFStringGetLength(state) <= 0);
    
    return NO;

有人有解决办法吗?

【问题讨论】:

【参考方案1】:

根据Sound Switch,没有公共 API 来检测静默开关的状态,但它们提供了一个 hack(使用公共 API,因此被认为可以通过 Ap Store 批准,但仍需谨慎对待):

http://sharkfood.com/content/Developers/content/Sound%20Switch/

【讨论】:

以上是关于AudioSessionGetProperty 已弃用,如何知道设备已静音的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9 如何检测静音模式?

如何获得系统卷 iOS?

UISlider 跟随音量,不工作

当 iPod 音乐停止时获取通知

耳机插好了吗? IOS 7

如何在不使用 iOS7 弃用方法的情况下获取 AirPlay 设备名称