我知道这是一个已经问过的问题,我发现可能有重复:
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上检测到它? 感谢
答案 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之后 已经发布,无论如何,尝试一下,应该工作