Обнаружить подключенные аудио устройства iOS - PullRequest
7 голосов
/ 09 сентября 2011

Я пытаюсь выяснить, как определить, какие из аудиоустройств подключены к iphone / ipad / ipod. Я знаю все о звуковых вызовах маршрута и обратных вызовах изменения маршрута, но они ничего не говорят мне о том, что прикреплено. Они только сообщают, где аудио в настоящее время направляется. Мне нужно знать, например, если наушники и / или Bluetooth все еще подключены во время передачи звука через динамики. Или, например, если пользователь подключает гарнитуру во время использования Bluetooth, а затем решает отключить Bluetooth, мне нужно знать, что Bluetooth отключен, даже если звук все еще передается через наушники.

Ответы [ 3 ]

1 голос
/ 13 сентября 2012

В случае 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 голос
/ 24 октября 2017

К сожалению, в 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;
    }
}
0 голосов
/ 25 марта 2012

Вы можете получить из свойств AudioSession список InputSources и OutputDestitions. Проверьте эти свойства сеанса:

kAudioSessionProperty_InputSources
kAudioSessionProperty_OutputDestinations

И для запроса деталей каждого вы можете использовать:

kAudioSessionProperty_InputSource
kAudioSessionProperty_OutputDestination
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...