首先匯入系統類別庫
#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 搞定!