如何检测iphone处于静音模式

Jyo*_*sna 17 iphone audio cocoa-touch objective-c ios

我正在开发一个应用程序.因为我想通过编码检测"iPhone是否处于静音模式?".我正在使用Objective-C的可可开发它.

如果有人知道它善意回复.

Nei*_*eil 19

Pirripli的代码不起作用的原因是模拟器不支持测试,代码不检查错误.更正后的代码如下:

CFStringRef state = nil;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);

if (status == kAudioSessionNoError)
{
    return (CFStringGetLength(state) == 0);   // YES = silent
}
return NO;
Run Code Online (Sandbox Code Playgroud)

  • 不适用于iPhone 4 iOS 5 :( .. state ="speaker",我认为 (2认同)

Ala*_*art 4

可以通过使用 AudioToolBox 测试 NULL 音频路由来实现:

UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;

AudioSessionGetProperty (
                         kAudioSessionProperty_AudioRoute,
                         &routeSize,
                         &route
                        );

if (route == NULL) {
    NSLog(@"Silent switch is on");
}
Run Code Online (Sandbox Code Playgroud)

如果路由为 NULL,则没有可用的音频输出。如果是“耳机”或“耳机”,则静音铃声开关可能仍处于打开状态。但是,当它设置为“扬声器”时,它永远不会打开。

您可能最好在音频路由更改属性侦听器中对此进行测试,设置如下:

AudioSessionAddPropertyListener (
                                 kAudioSessionProperty_AudioRouteChange,
                                 audioRouteChangeListenerCallback,
                                 self
                                 );
Run Code Online (Sandbox Code Playgroud)

注意:如果您正在做一些奇怪的事情,比如覆盖音频路由,那么这个答案可能不适用。

完整地设置和拆除音频会话可能超出了本答案的范围。

  • 它不工作 AudioSessionAddPropertyListener 在 ios-7 中也已弃用 (2认同)