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

转载 2013年12月03日 10:31:02
首先导入系统类库  

#import<AVFoundation/AVFoundation.h>

   //监听耳机事件

    [[AVAudioSessionsharedInstancesetDelegate: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 = [[[UIWindowallocinitWithFrame:[[UIScreenmainScreenbounds]]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.

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

iOS 之检测耳机插入和拔出

开发过程中录音和播放这块碰到了一些问题,麻烦的主要有三个: 检测是否有声音输入设备当有多个声音输出设备时,指定声音输出设备检测耳机的插入和拔出 第一个问题,对于iTouch和iPad等本身不带...
  • antjumper
  • antjumper
  • 2014年09月09日 18:15
  • 1220

iOS 监听耳机插入和拔出[检索]

iOS 监听耳机插入和拔出[检索]
  • qq_33777090
  • qq_33777090
  • 2016年06月06日 10:30
  • 930

mac老听着音乐,插拔耳机后,就没有声音了

Last login: Wed Jul 30 20:56:56 on ttys000 jingjingdeMacBook-Pro:~ jingjing$ sudo -i  Password: j...
  • wwxsoft
  • wwxsoft
  • 2014年07月31日 10:03
  • 808

【TopDesk】3.1.2. 利用JNI在Java中检测耳机插拔

TopDesk系列博文3.1.2 实现耳机插拔检测的JNI和Java部分
  • std4453
  • std4453
  • 2017年06月07日 23:22
  • 201

iOS检测耳机是否插入

#import - (BOOL)isHeadsetPluggedIn { AVAudioSessionRouteDescription* route = [[AVAudioSession ...
  • Dwarven
  • Dwarven
  • 2015年07月28日 16:53
  • 5086

win10系统中 耳机拔出再插入笔记本之后听不到声音

在我自己电脑上有的时候 耳机拔出再插入笔记本之后听不到声音,如何解决呢? 1、打开控制面板,选择硬件与声音 2、realtek高清晰音频管理器 3、选择点右上角那个文件夹 4、把这个勾上...
  • marco2018
  • marco2018
  • 2018年01月17日 17:52
  • 154

获取ios耳机线控事件

-(BOOL)canBecomeFirstResponder{     NSLog(@"_____%s_____",__FUNCTION__);     return YES; } /...
  • bluewindaa
  • bluewindaa
  • 2014年05月04日 17:13
  • 2121

ios 耳机线控

当你使用iphone的时候听音乐的时候,播放器在后台运行的时候,你仍然可以通过耳机来进行操作,完成曲目切换,快进,快退等功能! 当然你的程序不一定是播放器应用,但是我们仍然可以让它具有这个功能,让用户...
  • slinloss
  • slinloss
  • 2014年01月10日 15:33
  • 5698

判断设备是否插入耳机

判断设备是否插入耳机    //获取设备状态,是否插入耳机,如果插入耳机,则返回“YES" BY Leisure + (BOOL)isHeadphone { UInt32 propertySize =...
  • HDFQQ188816190
  • HDFQQ188816190
  • 2016年05月06日 17:18
  • 804

[iOS] iphone检测耳机插入/拔出

开发过程中录音和播放这块碰到了一些问题,麻烦的主要有三个: 检测是否有声音输入设备 当有多个声音输出设备时,指定声音输出设备 检测耳机的插入和拔出 第一个问题,对于iTouch和i...
  • onlyou930
  • onlyou930
  • 2012年04月09日 20:48
  • 11748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 如何监听出插入耳机 拔掉耳机事件?
举报原因:
原因补充:

(最多只允许输入30个字)