耳机外挂插件拔出事件时,音频路径不会改变 - iOS设备(headphone plug-in pl

2019-07-29 05:52发布

我工作在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;
}

希望这将帮助别人!

Answer 1:

我想通过以下方式解决它:你在AppDelegate中创建扬声器一个布尔值,让我们说: BOOL isSpeakerOn 。 和每一个音频线路回调被调用时,你必须确认一下当前的形势,扬声器和你想要做的又是什么。



Answer 2:

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

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



文章来源: headphone plug-in plug-out event when audio route doesn't change - iOS