IOS 判断耳机插入/拔出

一. 方式

 1.注册监听

//注册监听耳机设备的插入/拔出

    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(@"拔掉耳机");

    } elseif (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable) {

NSLog(@"插入耳机");

    } elseif (routeChangeReason == kAudioSessionRouteChangeReason_NoSuitableRouteForCategory) {

    }

}

二 . 

[[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:@"设备已插入"];

    }

    else

    {

        [MBProgressHUD showMessageHUDAddedTo:self.view message:@"设备已拔出"];

    }

}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。