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

简介:  在ios6以前,我们有如下的方法: #import       [[AVAudioSession sharedInstance] setDelegate:self];   AudioSessionAddPro...

 在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,通知也不会触发。







目录
相关文章
|
3月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
是否有其他框架可以在iOS设备上进行机器学习?
是否有其他框架可以在iOS设备上进行机器学习?
21 1
|
3月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
32 1
|
3月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
19 0
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
27 0
|
3月前
|
iOS开发
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
101 0
|
6月前
|
iOS开发 开发者
Xcode7.2真机调试iOS 9.3的设备
Xcode7.2真机调试iOS 9.3的设备
107 0
|
7月前
|
iOS开发
iOS 获取设备-语言,版本,国家
iOS 获取设备-语言,版本,国家
96 0
|
7月前
|
移动开发 小程序 Android开发
支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error
支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error
62 0
|
7月前
|
小程序 JavaScript API
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
92 0