您的位置:首页 > 移动开发 > IOS开发

iOS 如何监听出插入耳机 拔掉耳机事件?

2013-12-03 10:31 316 查看
首先导入系统类库

#import<AVFoundation/AVFoundation.h>

//监听耳机事件

[[AVAudioSessionsharedInstance] setDelegate:self];

// Use this code instead to allow the app sound to continue to play when the screen is locked.

[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlayback error:nil];

// Registers the audio route change listener callback function

AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallback,self);

把这段代码 写到 你需要监听的地方

我个人推荐放到

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOption

因为是全局嘛 哪里都可以响应到

例如

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]]autorelease];

//登陆VC

LoginViewController *loginVC = [[LoginViewControlleralloc]init];

UINavigationController *navNV = [[UINavigationControlleralloc]initWithRootViewController:loginVC
];

[navNVsetNavigationBarHidden:YES];

[loginVC release];

//监听耳机事件

[[AVAudioSessionsharedInstance] setDelegate:self];

// Use this code instead to allow the app sound to continue to play when the screen is locked.

[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlayback error:nil];

// Registers the audio route change listener callback function

AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallback,self);

self.window.rootViewController = navNV;

[navNV release];

self.window.backgroundColor = [UIColorwhiteColor];

[self.windowmakeKeyAndVisible];

return YES;

}

//触发的监听事件

void audioRouteChangeListenerCallback (void *inUserData, AudioSessionPropertyID inPropertyID, UInt32 inPropertyValueSize,const void *inPropertyValue
) {

// ensure that this callback was invoked for a route change

if (inPropertyID != kAudioSessionProperty_AudioRouteChange)return;

{

// Determines the reason for the route change, to ensure that it is not

// because of a category change.

CFDictionaryRef routeChangeDictionary = (CFDictionaryRef)inPropertyValue;

CFNumberRef routeChangeReasonRef = (CFNumberRef)CFDictionaryGetValue (routeChangeDictionary, CFSTR (kAudioSession_AudioRouteChangeKey_Reason) );

SInt32 routeChangeReason;

CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);

if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) {

//Handle Headset Unplugged

DLog(@"没有耳机!");

} else if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable) {

//Handle Headset plugged in

DLog(@"有耳机!");

}

}

}

OK 搞定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: