检测耳机是否已插入 - iOS 5

时间:2013-04-24 09:01:04

标签: ios objective-c headset

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

Detecting if headphones are plugged into iPhone

headphone plug-in plug-out event when audio route doesn't change - iOS

Detect if headphones (not microphone) are plugged in to an iOS device

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

3 个答案:

答案 0 :(得分: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 执行此操作。不幸的是,这个通知并没有告诉你新路由是什么,只是它从之前切换的路由。但是,你可以调用上面方法的一些变体来获得当前路线。

答案 1 :(得分:4)

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

    *portName 

确实包含'Koptelefoon',这使测试失败。

这将使国际上的工作更正确:

    if ([portDescription.portType isEqualToString:AVAudioSessionPortHeadphones])
        ;

答案 2 :(得分:0)

你有一个非常新的主题here,这可以帮助你,因为它发布在ios 5之后 已经发布,无论如何,尝试一下,应该工作