我正在试图弄清楚如何在iphone / ipad / ipod上连接哪个音频设备。我知道有关音频路由呼叫和路由更改回调的所有内容,但这些并没有告诉我任何关于附加内容的信息。它们仅报告音频当前路由的位置。例如,我需要知道,当音频通过扬声器路由时,耳机和/或蓝牙是否仍然连接。或者,例如,如果用户在使用蓝牙时插入耳机然后决定断开蓝牙,我需要知道即使音频仍然通过耳机路由,蓝牙也会断开连接。
答案 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.outputs
或AVAudioSessionModeVoiceChat
),则可以获取可用的列表通过AVAudioSession的AVAudioSessionModeVideoChat
输入,即使该设备不是活动路由,也会列出那些输入 - 当用户通过availableInputs
从蓝牙到扬声器进行手动覆盖时,这非常有用,例如,由于HFP是双向IO(同时具有输入和输出),您可以通过查看输入来判断输出HFP蓝牙是否仍然可用。
MPVolumeView