获取ios耳机线控事件

-(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>

   //监听耳机事件

    [[AVAudioSessionsharedInstancesetDelegate:self];

    

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

    [[AVAudioSessionsharedInstancesetCategory:AVAudioSessionCategoryPlaybackerror:nil];

    

   // Registers the audio route change listener callback function

   AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallbackself);



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



我个人推荐放到

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

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


例如 


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

{

   self.window = [[[UIWindowallocinitWithFrame:[[UIScreenmainScreen]bounds]]autorelease];

   //登陆VC

   LoginViewController *loginVC = [[LoginViewControlleralloc]init ];

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

    [navNVsetNavigationBarHidden:YES];

    [loginVC release];

    

   //监听耳机事件

    [[AVAudioSessionsharedInstancesetDelegate:self];

    

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

    [[AVAudioSessionsharedInstancesetCategory:AVAudioSessionCategoryPlaybackerror:nil];

    

   // Registers the audio route change listener callback function

   AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallbackself);

    

   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  搞定!  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值