-(BOOL)canBecomeFirstResponder{
NSLog(@"_____%s_____",__FUNCTION__);
return YES;
}
//received remote event
-(void)remoteControlReceivedWithEvent:(UIEvent *)event{
NSLog(@"event tyipe:::%d subtype:::%d",event.type,event.subtype);
//type==2 subtype==單擊暫停鍵:103,雙擊暫停鍵104
if (event.type == UIEventTypeRemoteControl) {
switch (event.subtype) {
case UIEventSubtypeRemoteControlPlay:{
NSLog(@"play---------");
}break;
case UIEventSubtypeRemoteControlPause:{
NSLog(@"Pause---------");
}break;
case UIEventSubtypeRemoteControlStop:{
NSLog(@"Stop---------");
}break;
case UIEventSubtypeRemoteControlTogglePlayPause:{
//單擊暫停鍵:103
NSLog(@"單擊暫停鍵:103");
}break;
case UIEventSubtypeRemoteControlNextTrack:{
//雙擊暫停鍵:104
NSLog(@"雙擊暫停鍵:104");
}break;
case UIEventSubtypeRemoteControlPreviousTrack:{
NSLog(@"三擊暫停鍵:105");
}break;
case UIEventSubtypeRemoteControlBeginSeekingForward:{
NSLog(@"單擊,再按下不放:108");
}break;
case UIEventSubtypeRemoteControlEndSeekingForward:{
NSLog(@"單擊,再按下不放,鬆開時:109");
}break;
default:
break;
}
}
}
把上面代碼加進去就能擷取耳機線控的各個點擊事件,嘀嘀打車之前版本中有一個耳機搶單的功能,就是這麼實現的
====================================================================================================
ios 開發中 捕獲耳機插拔事件
void audioRouteChangeListenerCallback (
void *inUserData,
AudioSessionPropertyID inID,
UInt32 inDataSize,
const void *inData)
{
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
CFStringRef state = nil;
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute
,&propertySize,&state);
NSLog(@"%@",(NSString *)state);//return @"Headphone" or @"Speaker" and so on.
}
- (void)viewDidLoad {
[super viewDidLoad];
AudioSessionInitialize (NULL, NULL, NULL, NULL);
OSStatus status = AudioSessionAddPropertyListener(
kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback,self);
//if(status == 0){//ok;}
}
====================================================================================================
首先匯入系統類別庫
#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:AVAudioSessionCategoryPlaybackerror: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:AVAudioSessionCategoryPlaybackerror:nil];
// Registers the audio route change listener