在app移至后台后检测输入和输出

时间:2014-12-02 17:42:23

标签: ios objective-c iphone

我正在尝试检测何时将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.inputsroute.outputs将包含有线iPhone headphones的{​​{1}}和microphone,并会显示内置接收器拔下耳机时内置麦克风。我遇到的问题是当我按下应用程序上的主页按钮并移动到后台时。当我将应用程序带回前台时,route.inputs始终为空。我的问题是:当调用headset活动时,是否需要在appDelegate中设置[[AVAudioSession sharedInstance] setActive:NO error: &activiationError]?因为当route.inputs返回空时,耳机仍然插入并且应该被检测到。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 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