Обнаружение iPhone / iPod Touch Аксессуары - PullRequest
10 голосов
/ 20 марта 2009

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

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

Ответы [ 5 ]

10 голосов
/ 21 марта 2009

Наконец нашел его - После инициализации объекта 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

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

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

4 голосов
/ 24 сентября 2012

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

BOOL audioHWAvailable = audioSession.inputAvailable;
4 голосов
/ 28 декабря 2010

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

if (![[AVAudioSession sharedInstance] inputIsAvailable]) {
    // your code here for no audio input available
}
0 голосов
/ 28 сентября 2011

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

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

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.");

    }
}
0 голосов
/ 20 марта 2009

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

...