2014-12-02 70 views
1

我試圖檢測何時將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將包含headphonesmicrophone爲有線iPhone headset並會顯示內置的接收器和內置的麥克風當耳機被拔出。我遇到的問題是當我按下我的應用上的主頁按鈕並且它移動到背景時。當我將應用程序帶回前臺時,route.inputs始終爲空。我的問題是:當我調用applicaionWillResign活動時,是否需要在我的appDelegate中設置[[AVAudioSession sharedInstance] setActive:NO error: &activiationError]?因爲當route.inputs回來時,耳機仍然插入,應該被檢測到。任何幫助,將不勝感激。謝謝。

回答

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

+0

只是好奇,如果這解決了你的問題? – benzino 2014-12-03 21:17:14