- (void)viewDidLoad
{//添加耳机拔掉侦听事件
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, audioRouteChangeCallback, self);
}
//耳机拔掉侦听事件回调 [myPlayer 为当前类,即为self]
void audioRouteChangeCallback(void *inClientData, AudioSessionPropertyID inID, UInt32inDataSize, const void *inData)
{
CFDictionaryRef routeChangeDictionary = inData;
CFNumberRef routeChangeReasonRef = CFDictionaryGetValue(routeChangeDictionary,CFSTR(kAudioSession_AudioRouteChangeKey_Reason));
SInt32 routeChangeReason;
CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
myPlayer *_self = (myPlayer *)inClientData;
if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) { //拔掉耳机
[_self dosomething];
} else if (routeChangeReason ==kAudioSessionRouteChangeReason_NewDeviceAvailable) { //插入耳机
}
}
- (void)dealloc {
//移除耳机拔掉事件
AudioSessionRemovePropertyListenerWithUserData(kAudioSessionProperty_AudioRouteChange, audioRouteChangeCallback, self);
}