我知道这是一个已经问过的问题,我发现可能重复:
...以及有关 WWW 的更多信息。但是我已经尝试了所有给出的解决方案,并且每次遇到问题,可能是因为它们是旧线程并且指的是 iOS 4。如何在 iOS 5.0 上检测到它?谢谢
我知道这是一个已经问过的问题,我发现可能重复:
...以及有关 WWW 的更多信息。但是我已经尝试了所有给出的解决方案,并且每次遇到问题,可能是因为它们是旧线程并且指的是 iOS 4。如何在 iOS 5.0 上检测到它?谢谢
如果您对仅限 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来做到这一点。不幸的是,这个通知并没有告诉你新的路线是什么,只是它切换的前一个路线。但是,您可以调用上述方法的一些变体来获取当前路线。
韦斯似乎有一个很好的解决方案。唉,它不是国际证明。此代码仅适用于英语。例如,在荷兰语中,耳机被称为“Koptelefoon”,
*portName
确实包含使测试失败的“Koptelefoon”。
这将在国际上正确地完成工作:
if ([portDescription.portType isEqualToString:AVAudioSessionPortHeadphones])
;