К сожалению, в iOS11, похоже, нет API для надежного получения списка устройств вывода, которые в данный момент подключены - как только текущий маршрут меняется, вы видите только 1 устройство (в настоящий момент маршрутизированное) через AVAudioSession currentRoute.outputs
даже если несколько устройств все еще могут быть подключены.
Однако для входа, включая устройства Bluetooth с профилем HFP, если используется правильный режим Audio Session (например, AVAudioSessionModeVoiceChat
или AVAudioSessionModeVideoChat
), список доступных входов можно получить через AVAudioSession availableInputs
, и эти входы перечислены там, даже если это устройство не является активным маршрутом - это очень полезно, когда пользователь выполняет ручное переключение через, например, MPVolumeView
с Bluetooth на динамик, и поскольку HFP является 2 -way IO (имеет как вход, так и выход), вы можете судить о том, доступен ли выход HFP Bluetooth, только взглянув на входы.
BOOL isBtInputAvailable = NO;
NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs];
for (AVAudioSessionPortDescription* port in inputs) {
if ([port.portType isEqualToString:AVAudioSessionPortBluetoothHFP]) {
isBtInputAvailable = YES;
break;
}
}