2

我知道这是一个已经问过的问题,我发现可能重复:

检测耳机是否插入 iPhone

音频路由未更改时的耳机插件插入事件 - iOS

检测耳机(不是麦克风)是否插入 iOS 设备

...以及有关 WWW 的更多信息。但是我已经尝试了所有给出的解决方案,并且每次遇到问题,可能是因为它们是旧线程并且指的是 iOS 4。如何在 iOS 5.0 上检测到它?谢谢

4

2 回答 2

9

如果您对仅限 iOS 6 的解决方案感到满意,Apple 添加了几个新的 AVAudioSession 属性,让您只需几行即可检测音频路由(并且不使用 C)。

使用此方法检查耳机(或调整它以检查其他输出 - “扬声器”,“耳机”等):

- (BOOL)isHeadsetPluggedIn
{
    // Get array of current audio outputs (there should only be one)
    NSArray *outputs = [[AVAudioSession sharedInstance] currentRoute].outputs;

    NSString *portName = [[outputs objectAtIndex:0] portName];

    if ([portName isEqualToString:@"Headphones"]) {
        return YES;
    }

    return NO;
}

如果你想被动地响应音频路由的变化,你可以使用新的 NSNotification,AVAudioSessionRouteChangeNotification来做到这一点。不幸的是,这个通知并没有告诉你新的路线是什么,只是它切换的前一个路线。但是,您可以调用上述方法的一些变体来获取当前路线。

于 2013-05-21T16:41:23.020 回答
4

韦斯似乎有一个很好的解决方案。唉,它不是国际证明。此代码仅适用于英语。例如,在荷兰语中,耳机被称为“Koptelefoon”,

    *portName 

确实包含使测试失败的“Koptelefoon”。

这将在国际上正确地完成工作:

    if ([portDescription.portType isEqualToString:AVAudioSessionPortHeadphones])
        ;
于 2014-01-01T20:17:32.713 回答