检测连接的音频设备iOS

时间:2011-09-08 22:33:49

标签: ios audio bluetooth

我正在试图弄清楚如何在iphone / ipad / ipod上连接哪个音频设备。我知道有关音频路由呼叫和路由更改回调的所有内容,但这些并没有告诉我任何关于附加内容的信息。它们仅报告音频当前路由的位置。例如,我需要知道,当音频通过扬声器路由时,耳机和/或蓝牙是否仍然连接。或者,例如,如果用户在使用蓝牙时插入耳机然后决定断开蓝牙,我需要知道即使音频仍然通过耳机路由,蓝牙也会断开连接。

3 个答案:

答案 0 :(得分:1)

对于iOS 5,您应该使用:

CFStringRef newRoute;
size = sizeof(CFStringRef);
XThrowIfError(AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &newRoute), "couldn't get new audio route");
if (newRoute)
{
    CFShow(newRoute);
    if (CFStringCompare(newRoute, CFSTR("HeadsetInOut"), NULL) == kCFCompareEqualTo) // headset plugged in
          {
            colorLevels[0] = .3;                
            colorLevels[5] = .5;
          }
    else if (CFStringCompare(newRoute, CFSTR("SpeakerAndMicrophone"), NULL) == kCFCompareEqualTo)
}

答案 1 :(得分:0)

您可以从AudioSession属性获取InputSources和OutputDestinations的列表。 查看这些会话属性:

kAudioSessionProperty_InputSources
kAudioSessionProperty_OutputDestinations

要查询每个细节,您可以使用:

kAudioSessionProperty_InputSource
kAudioSessionProperty_OutputDestination

答案 2 :(得分:0)

不幸的是,从iOS11开始,似乎没有API可靠地获取当前连接的输出设备列表 - 只要当前路由发生变化,您只能看到1个设备(当前路由)通过AVAudioSession的{{1即使多个设备仍然可以连接。

但是,对于输入,包括具有HFP配置文件的蓝牙设备,如果使用了正确的音频会话模式(例如currentRoute.outputsAVAudioSessionModeVoiceChat),则可以获取可用的列表通过AVAudioSession的AVAudioSessionModeVideoChat输入,即使该设备不是活动路由,也会列出那些输入 - 当用户通过availableInputs从蓝牙到扬声器进行手动覆盖时,这非常有用,例如,由于HFP是双向IO(同时具有输入和输出),您可以通过查看输入来判断输出HFP蓝牙是否仍然可用。

MPVolumeView