1

我在 iPad 上工作。我想检测用户何时拔出耳机。首先,我在属性上使用了一个侦听器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;
}

希望它会帮助某人!

4

2 回答 2

0

这是处理此问题的最佳教程:

http://www.techotopia.com/index.php/Detecting_when_an_iPhone_Headphone_or_Docking_Connector_is_Unplugged_(iOS_4)

于 2014-08-18T09:09:30.470 回答
0

我想出一个解决方案,方法如下:您在 AppDelegate 中为扬声器创建一个布尔值,比如说: BOOL isSpeakerOn。每次调用音频路由回调时,您都必须验证扬声器的当前情况以及您想要做什么。

于 2012-05-03T09:07:52.927 回答