Rilevamento di accessori per iPhone / iPod Touch

È ansible rilevare se l’iPod Touch / iPhone ha delle cuffie o altri accessori collegati?

Sto costruendo un’app che richiede un microfono e ho bisogno di sapere se “iSomething” ne ha una collegata o meno, tramite la connessione dock o utilizzando la porta delle cuffie, come con l’accessorio per cuffie / microfono in linea di Apple.

Finalmente trovato – Dopo l’inizializzazione dell’object Audio Session, – AudioSessionInitialize () – è ansible effettuare una chiamata a AudioSessionGetProperty e ottenere il valore di kAudioSessionProperty_AudioInputAvailable.

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

Secondo i documenti per Audio Session Services, questo dovrebbe essere usato piuttosto che usare il modello del dispositivo (iPhone vs. iPod Touch) per determinare se un ingresso audio è disponibile per l’uso. È anche ansible impostare una funzione di callback per monitorare le modifiche a questa proprietà tramite AudioSessionAddPropertyListener ().

Non sono ancora sicuro se questa proprietà si applica anche ai dispositivi connessi tramite il connettore Dock, ma sembra funzionare per il jack delle cuffie.

O potresti usare:

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

In IOS 6 inputIsAvailable è deprecato . In futuro dobbiamo usare inputAvailable :

 BOOL audioHWAvailable = audioSession.inputAvailable; 

Per determinare se il dispositivo ha un microfono integrato, puoi andare su [UIDevice currentDevice].model per vedere se è un iPhone o un iPod Touch di seconda generazione. Per quanto riguarda un microfono di terze parti collegato al connettore dock, questo non è ansible nell’SDK 2.2.1 corrente, ma potrebbe essere in una versione successiva 🙂

Ecco la soluzione, potrebbe piacerti o ti è utile.

Prima di utilizzare il metodo di seguito, scrivi anche questa linea

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