I solved it as given below:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err;
// close down our current session...
[audioSession setActive:NO error:nil];
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, &AudioSessionManager_audioRouteChangedListener, self);
void AudioSessionManager_audioRouteChangedListener (void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData)
{
NSLog(@"AudioSessionManager_audioRouteChangedListener");
MyAppDelegate *instance = (MyAppDelegate *)inClientData;
CFDictionaryRef routeChangeDictionary = inData;
// extract the route change reason...
CFNumberRef routeChangeReasonRef = CFDictionaryGetValue (routeChangeDictionary, CFSTR(kAudioSession_AudioRouteChangeKey_Reason));
SInt32 routeChangeReason = kAudioSessionRouteChangeReason_Unknown;
if (routeChangeReasonRef)
CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
// extract the old route..
CFStringRef newRoute;
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 5.0)
{
newRoute = CFDictionaryGetValue(routeChangeDictionary, @"OutputDeviceDidChange_NewRoute");
}
else
{
newRoute = CFDictionaryGetValue(routeChangeDictionary, @"OutputDeviceDidChange_NewRoute");
}
CFStringRef oldRoute;
oldRoute = CFDictionaryGetValue(routeChangeDictionary, @"OutputDeviceDidChange_OldRoute");
NSLog(@"newRouteString:%@ oldRoute:%@",newRoute,oldRoute);
[instance onAudioRouteChangedWithReason:routeChangeReason newRoute:(NSString *)newRoute oldRoute:(NSString *)oldRoute];
}