簡體   English   中英

音頻路由不變時的耳機插件插入事件-iOS

[英]headphone plug-in plug-out event when audio route doesn't change - iOS

我正在使用iPad。 我想檢測用戶何時插入耳機。 首先,我在屬性kAudioSessionProperty_AudioRouteChange上使用了一個偵聽kAudioSessionProperty_AudioRouteChange 因此一切運行良好,直到我決定添加一個按鈕以在仍插入耳機時切換到揚聲器。 所以我現在面臨一個問題,也許有人會想辦法解決。

這是場景:

  • 我插入耳機->我的音頻路線更改回調被稱為
  • 然后我將聲音切換到揚聲器(無需拔下耳機)->調用音頻路由更改回調
  • 然后拔下耳機(當聲音仍在輸出到揚聲器時)->未調用音頻路由更改回調,這似乎很合理。

但這是我的問題! 所以我的問題是:您是否找到一種方法可以檢測到最后一種情況是否拔出了耳機?

謝謝你的幫助

編輯:

好的,我找到了一種解決方法:

為了檢測是否插入了耳機,我總是需要執行一次測試功能(而不是使用布爾值),這可能對性能不太好,但是可以正常工作,這是我的代碼,可能需要它:

//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;
}

希望它能對某人有所幫助!

我想象一種解決方案,它是通過以下方式實現的:在AppDelegate中為揚聲器創建一個布爾值,比如說: BOOL isSpeakerOn 每次調用音頻路由回叫時,您都必須核實揚聲器的當前狀況以及您想做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM