ios监听输出设备变化(监听耳机插拔,蓝牙设备连接断开等)的实现

 在ios6以前,我们有如下的方法:

#import<AVFoundation/AVFoundation.h>

 

   
[[AVAudioSession sharedInstance] setDelegate:self];

  AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallback, self);

然后实现该回调:

//音频监控回调函数

static void audioRouteChangeListenerCallback (void                      *inUserData,

                                              AudioSessionPropertyID    inPropertyID,

                                              UInt32                    inPropertyValueSize,

                                              constvoid                *inPropertyValue

                                              )

{

    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 = inPropertyValue;

    CFNumberRef     routeChangeReasonRef =
CFDictionaryGetValue (routeChangeDictionary, CFSTR (kAudioSession_AudioRouteChangeKey_Reason));

    SInt32          routeChangeReason;

    CFNumberGetValue (routeChangeReasonRef,kCFNumberSInt32Type, &routeChangeReason);

//  do your handling here

}

请注意[[AVAudioSession sharedInstance] setDelegate:self]一定不要遗漏,否则该回调应该无法触发。

------------------------分割线------------------------

上面的方法是ios6以前的实现方式,我们可以看出这个api是比较低级的实现,其回调还是c的实现方式,而不是我们平常习惯的oc实现。

因此在ios6及以后,上面的api被deprecated了(当然,你要是还这么用,也还是能够实现功能),我们有更好更高级的实现来解决问题:

    [[NSNotificationCenterdefaultCenter]
addObserver:selfselector:@selector(outputDeviceChanged:)name:AVAudioSessionRouteChangeNotificationobject:[AVAudioSessionsharedInstance]];

- (void)outputDeviceChanged:(NSNotification *)aNotification

{

 // do your jobs here

}

请注意,addobserver的参数填写:其中的object必须是[AVAudioSession sharedInstance],而不是我们通常很多情况下填写的nil,此处若为nil,通知也不会触发。

时间: 2024-11-03 19:24:18

ios监听输出设备变化(监听耳机插拔,蓝牙设备连接断开等)的实现的相关文章

广播监听-动态注册监听网络变化没显示?

问题描述 动态注册监听网络变化没显示? API 19的是改变了网络状态没吐司.. 解决方案 iOS动态监听网络变化网络变化监听iOS监听网络状态的变化 解决方案二: 首先确保你在工程的清单文件里注册了这个BroadcastReceiver对象,你看看有吗,还有你看看是否要添加某些权限,具体的我忘了. 解决方案三: 确定一下所有配置没有问题吗?

Android 监听联系人变化没作用,获取不到数据

问题描述 登录成功 注册了EMContactManager.getInstance().setContactListener(new MyContactListener());//监听联系人变化还是监听不到 解决方案 注:最后要通知sdk,UI 已经初始化完毕,注册了相应的receiver和listener, 可以接受broadcast了EMChat.getInstance().setAppInited();这句代码有没有写解决方案二:忘记写了  现在可以了

Android编程实现监听EditText变化的方法_Android

本文实例讲述了Android编程实现监听EditText变化的方法.分享给大家供大家参考,具体如下: 监听EditText中的内容的变化.在EditText没有找到一个setOnxxxx的方法.百度了一下,原来在EditText中有一个方法addTextChangedListner(TextWatcher watcher)方法,用他可以时时监听EditText的内容变化.TextWatcher是一个接口类,所以必须实现TextWatcher里的抽象方法: 当EditText里面的内容有变化的时候

Android 监听网络变化

Android 监听网络变化  

oracle-ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程

问题描述 ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程 ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程 解决方案 这是要修改客户端配置tnnames.ora文件,你试一下如下的修改 demo = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 主机名)(PORT = 端口号)) ) (CONNECT_DATA = (SERVER = SHARED) (SID=de

ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程

    今天使用PL/SQL Developer连接到一台新的测试服务器时,遇到ORA错误:ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程.对应的监听日志文件里面错误为TNS-12523: TNS:listener could not find instance appropriate for the client connection   首先使用oerr命令查看ORA-12523错误提示的详细内容 [oracle@DB-Server admin]$ oerr ora

ZooKeeper 笔记(2) 监听数据变化

ZK中的每个节点都可以存储一些轻量级的数据,这些数据的变化会同步到集群中的其它机器.在应用中程序员可以添加watcher来监听这些数据的变化,watcher只会触发一次,所以触发过后想要继续监听,必须再手动设置监听,这比较麻烦,好在ZkClient已经做了一些增强,在watcher的基础上,封装了所谓的Listener,开发人员只需要订阅Listener即可. package yjmyzz.test; import com.cnblogs.yjmyzz.domain.BaseBean; impo

模拟使用Flume监听日志变化,并且把增量的日志文件写入到hdfs中

1.采集日志文件时一个很常见的现象 采集需求:比如业务系统使用log4j生成日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs中. 1.1.根据需求,首先定义一下3大要素: 采集源,即source-监控日志文件内容更新:exec 'tail -F file' 下沉目标,即sink-HDFS文件系统:hdfs sink Source和sink之间的传递通道--channel,可用file channel也可以用 内存channel. 1.2.进入/home/tuzq/softw

一种新型攻击手法:监听WIFI变化嗅探手机输入

黑客可以通过观察无线WIFI信号变化,窃取到你的密码,PINs码和键盘快捷键等敏感信息. 来自上海交通大学.南佛罗里达大学.马塞诸塞州和波士顿大学的联合研究团队公布了他们研究的最新技术.该项技术仅需要搭建一个WIIF热点,即可分析无线电信号变化并窃取敏感信息. 这项技术被命名为WindTalker,这项攻击技术通过读取称为信道状态信息(CSI)的无线电信号模式,嗅探手机触屏变化或者电脑键盘按键运动. CSI是WIFI协议的一部分,它提供了WIFI信号状态信息. "攻击者可以利用CSI波动与击键之