我正在使用iPad。 我想檢測用戶何時拔出耳機。首先,我在房產kAudioSessionProperty_AudioRouteChange
上使用了一位聽衆。所以一切都很好,直到我決定添加一個按鈕,以在耳機仍然插上時切換到揚聲器。所以我現在面臨一個問題,也許有人會有一個想法來解決它。音頻路由不變時的耳機插件插件事件 - iOS
下面是這種情況:
- 我插上耳機 - >我的音樂路線更改回調叫
- 然後切換音揚聲器(沒有拔出我的耳機) - >音頻路由改變回調叫
- 然後我拔掉耳機(當聲音仍在輸出到揚聲器時) - >音頻路由改變回調不被調用,這似乎是合乎邏輯的。
但這是我的問題!所以我的問題是:您是否看到了一種方法來檢測該耳機是否因最後一種情況而被拔掉?
感謝您的幫助
編輯:
好,我找到了一個解決辦法:
爲了檢測耳機是否被堵塞,我執行測試功能我需要的所有次知道它(而不是使用布爾值),這可能不是很好的表現,但它的工作,這是我可能需要它的代碼:
//set back the default audio route
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
//check if this default audio route is Heaphone or Speaker
CFStringRef newAudioRoute;
UInt32 newAudioRouteSize = sizeof(newAudioRoute);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &newAudioRouteSize, &newAudioRoute);
NSString *newAudioRouteString = (__bridge NSString *)newAudioRoute;
CFRelease(newAudioRoute);
//if this default audio route is not Headphone, it means no headphone is plugged
if ([newAudioRouteString rangeOfString:@"Headphones"].location != NSNotFound){
NSLog(@"Earphone available");
return true;
}
else {
NSLog(@"No Earphone available");
return false;
}
希望它能幫助別人!
你嘗試將聲音切換到耳機背部,然後嘗試拔掉耳機?我認爲,iPad會切換到揚聲器,而當您拔下耳機時,它認爲,沒有必要再次調用該功能,它已經設置在揚聲器上。 – MMMM
是的,我同意你的看法,但我的需求是能夠檢測到用戶拔下了耳機,即使使用揚聲器。我需要這個來設置布爾值爲false。因爲用戶總是做他想做的事情,所以我必須處理所有情況...... – Cyril
在第二種情況下,即使使用耳機切換揚聲器,您也必須能夠聽到揚聲器上的聲音以及耳機,或只在揚聲器上? – MMMM