我正在尝试检测何时将headphones
插入iPhone。我这样做采购以下方法。
//Init the AVAudioSession
-(void)viewDidLoad
{
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];
NSError *activationError = nil;
[[AVAudioSession sharedInstance] setActive: YES error: &activationError];
}
//Get the current audio session route
-(void)viewWillAppear
{
AVAudioSessionRouteDescription *route = [[AVAudioSession sharedInstance] currentRoute];
}
此工作正常,route.inputs
和route.outputs
将包含有线iPhone headphones
的{{1}}和microphone
,并会显示内置接收器拔下耳机时内置麦克风。我遇到的问题是当我按下应用程序上的主页按钮并移动到后台时。当我将应用程序带回前台时,route.inputs始终为空。我的问题是:当调用headset
活动时,是否需要在appDelegate中设置[[AVAudioSession sharedInstance] setActive:NO error: &activiationError]
?因为当route.inputs返回空时,耳机仍然插入并且应该被检测到。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
我认为更好的方法是:
- (BOOL)isHeadsetPluggedIn
{
AVAudioSessionRouteDescription* route = [[AVAudioSession sharedInstance] currentRoute];
for (AVAudioSessionPortDescription* desc in [route outputs])
{
if ([[desc portType] isEqualToString:AVAudioSessionPortHeadphones])
return YES;
}
return NO;
}
我刚测试过这个,即使从背景回到前景,也可以在viewDiDLoad
上进行测试链接到原始Answer