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