导入苹果的两个框架是必不可少的环节。。。

代码部分+小解:

[cpp] view plaincopy
  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. // Do any additional setup after loading the view, typically from a nib.
  5. AudioSessionInitialize (NULL, NULL, NULL, NULL);
  6. /*
  7. OSStatus AudioSessionInitialize (
  8. CFRunLoopRef                      inRunLoop,
  9. CFStringRef                       inRunLoopMode,
  10. AudioSessionInterruptionListener  inInterruptionListener,
  11. void                              *inClientData
  12. );
  13. 这个函数,必须在调用其他AudioSession functions之前调用
  14. inRunLoop
  15. The run loop that the interruption listener callback should be run on. Pass NULL to use the main run loop.
  16. 置 NULL ,是使用默认的the main run loop;(当在监听器回调的时候停止循环)
  17. inRunLoopMode
  18. The mode for the run loop that the interruption listener function will run on. Passing NULL is equivalent to passing kCFRunLoopDefaultMode(kCFRunLoopDefaultMode来持有对象,在应用或线程闲置的时候这些对象被监控).
  19. (当监听器将要回调的时候运行循环中断)  NULL == kCFRunLoopDefaultMode,
  20. inInterruptionListener
  21. The interruption listener callback function. The application’s audio session object invokes the callback when the session is interrupted and (if the application is still running) when the interruption ends. Can be NULL. See AudioSessionInterruptionListener.
  22. 用 NULL 来代替 AudioSessionInterruptionListener(音频会话被打断),当我们拔下耳机的时候,音频会话被打断,从而使得应用程序的音频对象引起了回调。
  23. inClientData
  24. Data that you would like to be passed to your interruption listener callback.
  25. */
  26. [self addHeadPhoneListener];
  27. }

添加监听事件和回调函数:

[cpp] view plaincopy
  1. //监听耳机插入和拔出
  2. - (BOOL)addHeadPhoneListener
  3. {
  4. OSStatus status = AudioSessionAddPropertyListener(
  5. kAudioSessionProperty_AudioRouteChange,
  6. audioRouteChangeListenerCallback,self);
  7. /*
  8. AudioSessionAddPropertyListener(
  9. AudioSessionPropertyID              inID,
  10. AudioSessionPropertyListener        inProc,
  11. void                                *inClientData
  12. )
  13. 注册一个监听:audioRouteChangeListenerCallback,当音频会话传递的方式(耳机/喇叭)发生改变的时候,会触发这个监听
  14. kAudioSessionProperty_AudioRouteChange :就是检测音频路线是否改变
  15. */
  16. }
  17. void audioRouteChangeListenerCallback (
  18. void                      *inUserData,
  19. AudioSessionPropertyID    inPropertyID,
  20. UInt32                    inPropertyValueS,
  21. const void                *inPropertyValue
  22. ) {
  23. UInt32 propertySize = sizeof(CFStringRef);
  24. AudioSessionInitialize(NULL, NULL, NULL, NULL);
  25. CFStringRef state = nil;
  26. //获取音频路线
  27. AudioSessionGetProperty(kAudioSessionProperty_AudioRoute
  28. ,&propertySize,&state);//kAudioSessionProperty_AudioRoute:音频路线
  29. NSLog(@"%@",(NSString *)state);//Headphone 耳机  Speaker 喇叭.
  30. }

理解的不透彻,望各位大神指教。

IOS成长之路-检测耳机插入/拔出相关推荐

  1. iphone检测耳机插入/拔出

    iphone检测耳机插入/拔出 开发过程中录音和播放这块碰到了一些问题,麻烦的主要有三个: 检测是否有声音输入设备 当有多个声音输出设备时,指定声音输出设备 检测耳机的插入和拔出 第一个问题,对于iT ...

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

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

  3. Android P检测USB插入拔出消息并基于libaums实现读取USB文件

    Android设备中检测USB插入消息,并且从USB中读取文件. 一.导入libaums包 libaums开源项目地址:https://github.com/magnusja/libaums buil ...

  4. Android实现检测耳机插入和拔出

    在Android下实现检测耳机插入和拔出,也即建立一个Broadcast Receiver,监听"android.intent.action.HEADSET_PLUG"广播 但直接 ...

  5. 来自我的破船大大的博客,记录他的iOS成长之路,与君同勉!

    注1:这篇文章是我的iOS成长之路系列文章中的第三篇文章,第一篇文章:iOS成长之路-1-入门,第二篇文章: iOS成长之路-2-我的第一个iOS Demo. 通过两周时间来学习iOS,我慢慢的叩开了 ...

  6. 在.NET中探测U盘的插入/拔出

    当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息,当消息的wParam 值等于 DBT_DEVICEARRIVAL 时,表示Media设备被插入并且已经可用 ...

  7. win10系统,主机箱的前置耳麦插孔用不了,“设置——声音”麦克风或者耳机已拔出未修复,“输入设备”无插座信息,更新驱动也无效,控制面板——小图标里查不到realtek高清晰音频管理器——一招解决

    win10系统,有一天忽然固态硬盘坏了,拆了重装系统之后主机箱的前置耳麦插孔里,插了耳机只能听到声音,麦克风无效,微信语音电话打不出去了. 查了一圈,"设置--声音"显示:麦克风或 ...

  8. linux udev 检测u盘的插入和拔出,在Linux中C检测插入/拔出USB串行设备

    我需要检测何时在我的嵌入式系统上插入或拔出USB串行设备,并知道与之相关的tty是什么. 我的系统运行在2.6 Linux内核上. 由于我没有对udev规则的写访问权限,现在我正在尝试从文件系统获取此 ...

  9. 《小白HTML5成长之路38》插入视频的功能好简单

    "朱哥,现在视频站好火啊!那些视频是怎么放到网页上进行播放的呢?一定很麻烦吧!" 老朱:"不麻烦,HTML5标准下,一个video标签就搞定了." 小白:&qu ...

最新文章

  1. 数据库种类 以及优缺点
  2. Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等
  3. 《数字质量手册》新书问答
  4. 白钢条用什么可以切割_错怪李佳琦了!原来用小苏打刷牙,1个月真的可以白4度,太心动了...
  5. CString、std::string格式化字符串
  6. c 递归下降识别程序_看动画轻松理解递归与动态规划
  7. tcp/ip 协议栈Linux内核源码分析13 udp套接字发送流程二
  8. org.activiti.bpmn.exceptions.XMLException: src-resolve: 无法将名称 'extension' 解析为 'element declaration'
  9. Code First :使用Entity. Framework编程(6) ----转发 收藏
  10. 编程之美 set 8 区间重合判断
  11. maven项目包导不进去_IntelliJ Idea下Maven插件使用技巧
  12. 修改CentOS系统默认编码为中文utf8(也可修改成其他的)
  13. 湖北省小学生计算机大赛,2019年湖北省中小学电脑制作活动机器人竞赛类暨创客竞赛类项目选拔赛圆满落幕...
  14. 服务器如何自动校准北京时间,北京时间
  15. Trapcode Particular 5 - Particle
  16. 中文和英语中主语、谓语、宾语、定语、状语、补语的定义
  17. java 中文星期表示_java之获得中文星期几
  18. Ubuntu下配置FreeRADIUS + PPTP/L2TP + Mysql + daloRADIUS
  19. DGUT新学期,新FLAG
  20. springboot远程心电诊断系统毕业设计源码091759

热门文章

  1. java读取excel数据保存到数据库中_java读取excel的内容(可保存到数据库中)
  2. c语言实现辗除法,辗除法什么东西哦?
  3. php 字符串判空,php 使用 preg_replace 去除空格后的字符串无法判空
  4. python拷贝文件函数_Python Set集合,函数,深入拷贝,浅入拷贝,文件处理
  5. 【机器学习算法专题(蓄力计划)】二、机器学习中的统计学习方法概论
  6. 时间序列预测方法汇总:从理论到实践(附Kaggle经典比赛方案)
  7. ACL 2021 | 北京大学KCL实验室:如何利用双语词典增强机器翻译?
  8. Linux安装配置Java1.8开发环境
  9. Numpy-随机生成以及矩阵的运算
  10. 爱酷pro充电测试软件,iQOO 5 Pro续航、充电测试简报