Commutation entre le casque et le haut-parleur sur l'iPhone

J'essaie de configurer le routing audio pour la sortie d'une application iPhone. J'utilise un écouteur de changement de route pour détecter quand la route audio a changé. L'auditeur détecte les changements, par exemple lorsque les écouteurs sont branchés et débranchés. Par défaut, le haut-parleur joue de l'audio, puis je twig mon casque et l'audio transmet à travers les écouteurs. À partir de là, aucune modification ne se produit, même si l'écouteur de modification d'itinéraire les détecte.

Toute aide sera grandement appréciée.

NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(sessionCategory), &sessionCategory); AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, RouteChangeListener, (__bridge void *)(self)); AudioSessionSetActive(YES); 

Écouteur de callback:

 void RouteChangeListener( void *inUserData, AudioSessionPropertyID inPropertyID, UInt32 inPropertyValueSize, const void *inPropertyValue) { if (inPropertyID == kAudioSessionProperty_AudioRouteChange) { CFSsortingngRef newRoute; UInt32 size = sizeof(CFSsortingngRef); AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &newRoute); if (newRoute) { CFShow(newRoute); if (CFSsortingngCompare(newRoute, CFSTR("SpeakerAndMicrophone"), (UInt32)NULL) == kCFCompareEqualTo) { UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); } else if (CFSsortingngCompare(newRoute, CFSTR("HeadphonesAndMicrophone"), (UInt32)NULL) == kCFCompareEqualTo) { UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); [[[AVAudioSession sharedInstance] player] play]; } } } }