如何获得通知时耳机输入/输出被堵塞? 苹果电脑(How to get notifications

2019-08-08 00:50发布

我想获得通知时,耳机中或外面的耳机插孔插入。
我四处寻找这对计算器,但我似乎无法找到我要找的Mac上,我只能找到适用于iOS。
那么,你对如何进行任何想法? 我想这个做的是:当耳机插入了我希望以编程暂停iTunes(iOS版类似功能)。
谢谢!

Answer 1:

您可以观察使用的变化CoreAudio框架。

两个耳机和扬声器是相同的音频输出设备上的数据源(类型的内置)。 其中两个将根据被堵塞或不耳机是音频设备上。

为了让你听内置的输出设备上的活动数据源的更改的通知。

1.获取内置输出设备

为了让这短暂的,我们将使用默认的输出设备。 在大多数情况下,这是内置的输出设备。 在现实生活中的应用,你会要循环所有可用设备找到它,因为默认的设备可以被设置为不同的音频设备(soundflower或点播为例)。

AudioDeviceID defaultDevice = 0;
UInt32 defaultSize = sizeof(AudioDeviceID);

const AudioObjectPropertyAddress defaultAddr = {
    kAudioHardwarePropertyDefaultOutputDevice,
    kAudioObjectPropertyScopeGlobal,
    kAudioObjectPropertyElementMaster
};

AudioObjectGetPropertyData(kAudioObjectSystemObject, &defaultAddr, 0, NULL, &defaultSize, &defaultDevice); 

2.阅读其当前数据源

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

AudioObjectPropertyAddress sourceAddr;
sourceAddr.mSelector = kAudioDevicePropertyDataSource;
sourceAddr.mScope = kAudioDevicePropertyScopeOutput;
sourceAddr.mElement = kAudioObjectPropertyElementMaster;

UInt32 dataSourceId = 0;
UInt32 dataSourceIdSize = sizeof(UInt32);
AudioObjectGetPropertyData(defaultDevice, &sourceAddr, 0, NULL, &dataSourceIdSize, &dataSourceId);

3.观察更改到数据源

AudioObjectAddPropertyListenerBlock(_defaultDevice, &sourceAddr, 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
}

但是我无法找到这些值定义的任何常量,所以这是一种无证。



Answer 2:

我一直在寻找类似的解决方案,发现自动静音的应用程序商店。 它工作得很好。 https://itunes.apple.com/us/app/automute-preventing-awkward/id1118136179?mt=12我也工作在我自己的一些脚本,并写这个剧本,以测试是否插入耳机,插上电源: HTTPS ://gist.github.com/jordan314/bffa2e6cdbf248f8c558ba6496dcc7ea



文章来源: How to get notifications when the headphones are plugged in/out? Mac