我在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;
}
希望它会帮助别人!
答案 0 :(得分:0)
我想象一下它的解决方案如下:
你在AppDelegate中为扬声器创建一个布尔值,让我们说:
BOOL isSpeakerOn
。每次调用音频路由回调时,您必须验证扬声器的当前情况以及您想要执行的操作。
答案 1 :(得分:0)