Обнаружение iPhone / iPod Touch

Можно ли определить, есть ли у iPod Touch / iPhone какие-либо наушники или другие аксессуары, подключенные к нему?

Я создаю приложение, для которого требуется микрофон, и нужно знать, имеет ли «iSomething» один подключенный или нет, либо через подключение док-станции, либо через порт для наушников, например, с помощью встроенного аксессуара для наушников / микрофона от Apple.

Наконец, нашел его. После инициализации объекта Audio Session, – AudioSessionInitialize () – вы можете сделать вызов AudioSessionGetProperty и получить значение kAudioSessionProperty_AudioInputAvailable.

AudioSessionInitialize(NULL, NULL, NULL, NULL); UInt32 propertySize, micConnected; AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &propertySize, &micConnected); [self updateMicStatus:micConnected]; // user-created method 

Согласно документам для служб аудиосеансов, это следует использовать, а не использовать модель устройства (iPhone против iPod Touch), чтобы определить, доступен ли аудиовход для использования. Вы также можете настроить функцию обратного вызова для контроля изменений этого свойства с помощью функции AudioSessionAddPropertyListener ().

Не уверен, что это свойство также относится к устройствам, подключенным через разъем Dock, но, похоже, работает для разъема для наушников.

Или вы можете использовать:

 if (![[AVAudioSession sharedInstance] inputIsAvailable]) { // your code here for no audio input available } 

В IOS 6 inputIsAvailable устарел . В будущем нам нужно использовать inputAvailable :

 BOOL audioHWAvailable = audioSession.inputAvailable; 

Чтобы определить, есть ли у устройства встроенный микрофон, вы можете просто [UIDevice currentDevice].model чтобы узнать, является ли это iPhone или iPod Touch второго поколения. Что касается стороннего микрофона, подключенного к разъему док-станции, это невозможно в текущем 2.2.1 SDK, но может быть в более поздней версии 🙂

Вот решение, вам может понравиться или оно вам полезно.

Прежде чем использовать метод ниже, напишите эту две строки

 UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); - (void)isHeadsetPluggedIn { UInt32 routeSize = sizeof (CFStringRef); CFStringRef route; AudioSessionGetProperty (kAudioSessionProperty_AudioRoute, &routeSize, &route); //NSLog(@"Error >>>>>>>>>> :%@", error); /* Known values of route: * "Headset" * "Headphone" * "Speaker" * "SpeakerAndMicrophone" * "HeadphonesAndMicrophone" * "HeadsetInOut" * "ReceiverAndMicrophone" * "Lineout" */ NSString* routeStr = (NSString*)route; NSRange headsetRange = [routeStr rangeOfString : @"Headset"]; NSRange receiverRange = [routeStr rangeOfString : @"Receiver"]; if(headsetRange.location != NSNotFound) { // Don't change the route if the headset is plugged in. NSLog(@"headphone is plugged in "); } else if (receiverRange.location != NSNotFound) { // Change to play on the speaker NSLog(@"play on the speaker"); } else { NSLog(@"Unknown audio route."); } } 
  • Замена на устаревший размерWithFont: в iOS 7?
  • Ошибка UIActivityViewController на iOS 8 iPads
  • NULL против нуля в Objective-C
  • UITableViewCell расширяется по клику
  • Как я могу добавить объекты CGPoint в NSArray простым способом?
  • Как установить плагин Xcode для автоматического форматирования кода
  • Изменить цвет курсора в UITextField
  • Выполнение команд оболочки с помощью NSTask - Objective-C Cocoa
  • Как настроить размер содержимого UIScrollView динамически
  • iPhone: UITableView CellAccessory Checkmark
  • Получение случайного объекта из NSArray без дублирования
  • Давайте будем гением компьютера.