objective-c – 耳机插入拔出时如何获取通知?苹果电脑

objective-c – 耳机插入拔出时如何获取通知?苹果电脑,第1张

概述当耳机插孔插入耳机时,我想收到通知. 我在stackoverflow上搜索了这个,但我似乎找不到我在寻找的Mac,我只能找到iOS. 那么,你有什么想法如何执行这个?我想要做的是:当耳机插拔时,我想以编程方式暂停iTunes(类似iOS的功能). 谢谢! 您可以使用CoreAudio框架观察更改. 耳机和扬声器都是同一个音频输出设备(内置型号)的数据源.其中一个将在基于插入或不插入耳机的音频设备上 当耳机插孔插入耳机时,我想收到通知.
我在stackoverflow上搜索了这个,但我似乎找不到我在寻找的Mac,我只能找到iOS.
那么,你有什么想法如何执行这个?我想要做的是:当耳机插拔时,我想以编程方式暂停iTunes(类似iOS的功能).
谢谢!解决方法 您可以使用CoreAudio框架观察更改.

耳机和扬声器都是同一个音频输出设备(内置型号)的数据源.其中一个将在基于插入或不插入耳机的音频设备上.

要收到通知,您将收听内置输出设备上活动数据源的更改.

1.获取内置的输出设备

为了保持这个简短,我们将使用默认的输出设备.在大多数情况下,这是内置的输出设备.在现实生活中,您需要循环查找所有可用的设备,因为默认设备可以设置为不同的音频设备(例如soundflower或airplay).

Audiodeviceid defaultDevice = 0;UInt32 defaultSize = sizeof(Audiodeviceid);const AudioObjectPropertyAddress defaultAddr = {    kAudioHarDWarePropertyDefaultOutputDevice,kAudioObjectPropertyScopeGlobal,kAudioObjectPropertyElementMaster};AudioObjectGetPropertyData(kAudioObjectSystemObject,&defaultAddr,NulL,&defaultSize,&defaultDevice);

2.读取当前的数据源

设备上的当前数据源由UInt32类型的ID标识.

AudioObjectPropertyAddress sourceAddr;sourceAddr.mSelector = kAudioDevicePropertyDataSource;sourceAddr.mScope = kAudioDevicePropertyScopeOutput;sourceAddr.mElement = kAudioObjectPropertyElementMaster;UInt32 dataSourceID = 0;UInt32 dataSourceIDSize = sizeof(UInt32);AudioObjectGetPropertyData(defaultDevice,&sourceAddr,&dataSourceIDSize,&dataSourceID);

3.观察数据源的更改

AudioObjectAddPropertyListenerBlock(_defaultDevice,dispatch_get_current_queue(),^(UInt32 inNumberAddresses,const AudioObjectPropertyAddress *inAddresses) {    // move to step 2. to read the updated value});

确定数据源类型

当数据源ID为UInt32时,您可以使用值变换器查询音频对象的属性.例如,将源名称作为字符串使用kAudioDevicePropertyDataSourcenameForIDCFString.这将导致字符串“内部扬声器”或“耳机”.但是这可能会因用户区域而异.

更简单的方法是直接比较数据源ID:

if (dataSourceID == 'ispk') {    // Recognized as internal speakers} else if (dataSourceID == 'hdpn') {    // Recognized as headphones}

然而,我找不到为这些值定义的任何常量,所以这是一种无证的.

总结

以上是内存溢出为你收集整理的objective-c – 耳机插入/拔出时如何获取通知?苹果电脑全部内容,希望文章能够帮你解决objective-c – 耳机插入/拔出时如何获取通知?苹果电脑所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存