Wykrywanie akcesoriów iPhone/iPod Touch

Czy można wykryć, czy iPod Touch/iPhone ma podłączone do niego słuchawki lub inne akcesoria?

Buduję aplikację, która wymaga mikrofonu i muszę wiedzieć, czy "iSomething" ma jeden podłączony, czy nie, albo za pośrednictwem połączenia dokującego, lub za pomocą portu słuchawkowego, na przykład z akcesorium słuchawek/mikrofonu Inline od Apple.

Author: Cœur, 2009-03-20

5 answers

Wreszcie go znalazłem - po zainicjowaniu obiektu sesji Audio, - AudioSessionInitialize () - możesz wykonać wywołanie AudioSessionGetProperty i uzyskać wartość kAudioSessionProperty_AudioInputavailable.

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

Zgodnie z docs for audio Session Services, powinno to być używane zamiast używać modelu urządzenia (iPhone vs. iPod Touch) w celu określenia, czy wejście audio jest dostępne do użycia. Możesz również skonfigurować funkcję wywołania zwrotnego, aby monitorować zmiany w tej właściwości za pomocą AudioSessionAddPropertyListener().

Nie jestem jeszcze pewien, czy ta właściwość dotyczy również urządzeń podłączonych przez złącze dokujące, ale wydaje się, że działa dla gniazda słuchawkowego.

 10
Author: Josh Buhler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-20 22:51:12

Lub możesz użyć:

if (![[AVAudioSession sharedInstance] inputIsAvailable]) {
    // your code here for no audio input available
}
 4
Author: Bassem Tamimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-06 07:05:11

In IOS 6 inputIsAvailable jest przestarzały . W przyszłości musimy użyć inputAvailable:

BOOL audioHWAvailable = audioSession.inputAvailable;
 4
Author: Prine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-24 15:28:01

Aby określić, czy urządzenie ma wbudowany mikrofon, możesz po prostu przejść [UIDevice currentDevice].model, aby sprawdzić, czy jest to iPhone lub iPod Touch drugiej generacji. Jeśli chodzi o mikrofon innej firmy podłączony do złącza stacji dokującej, nie jest to możliwe w aktualnym SDK 2.2.1, ale może to być w późniejszej wersji:)

 0
Author: Andy Bourassa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-14 08:46:09

Oto rozwiązanie, może Ci się spodoba lub jest dla ciebie pomocne.

Przed użyciem poniższej metody proszę napisać również tę linię

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
Author: Nilesh Kikani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 21:09:07