I. Modalities
1. Register for monitoring
Registering the headset device insert /Unplug
audiosessionaddpropertylistener (kaudiosessionproperty_audioroutechange, Audioroutechangelistenercallback, nil);
2.
void Audioroutechangelistenercallback (
void *inuserdata,
Audiosessionpropertyid Inpropertyid,
UInt32 Inpropertyvaluesize,
const void *inpropertyvalue
) {
if (Inpropertyid! = Kaudiosessionproperty_audioroutechange) return;
Cfdictionaryref routechangedictionary = (cfdictionaryref) inpropertyvalue;
Cfnumberref Routechangereasonref =
(CFNUMBERREF) Cfdictionarygetvalue (Routechangedictionary,
Cfstr (Kaudiosession_audioroutechangekey_reason));
SInt32 Routechangereason;
Cfnumbergetvalue (Routechangereasonref, Kcfnumbersint32type, &routechangereason);
if (Routechangereason = = kaudiosessionroutechangereason_olddeviceunavailable) {
NSLog (@ "Unplug the headset");
} elseif (Routechangereason = = kaudiosessionroutechangereason_newdeviceavailable) {
NSLog (@ "Insert headset");
} elseif (Routechangereason = = kaudiosessionroutechangereason_nosuitablerouteforcategory) {
}
}
Two.
[[Nsnotificationcenter defaultcenter] addobserver:self selector:@selector( Outputdevicechanged:) name: Avaudiosessionroutechangenotification object: [Avaudiosession Sharedinstance]];
-(void) outputdevicechanged: (nsnotification *) anotification
{
BOOL flag = [Audiohelper hasheadset];
if (flag) {
[Mbprogresshud showmessagehudaddedto:self. View message:@ " device inserted "];
}
Else
{
[Mbprogresshud showmessagehudaddedto:self. View message:@ " device unplugged "];
}
}
IOS to determine headset insertion/removal