如何检测WinRT中未插入的耳机插孔?

有没有办法在WinRT应用程序中拔下耳机插孔时收到通知? 我希望能够暂停MediaElement播放,以防止声音通过扬声器泄漏。

Jack检测通知通过IMMNotificationClient :: OnDeviceStateChanged公开。 刚刚在win8桌面上尝试过,当(联合)插入设备时,OnDeviceStateChanged会被DEVICE_STATE_UNPLUGGED和DEVICE_STATE_ACTIVE调用。 遗憾的是,wasapi的一部分仅被记录为桌面,因此我猜在WinRT中无法做到这一点。

请尝试以下方法:

视窗:设备::枚举:: DeviceInformation :: CreateWatcher(视窗:设备::枚举:: DEVICECLASS :: AudioRender);

这适用于WinRT。

有关该方法的更多详细信息,请参阅MSDN: http : //msdn.microsoft.com/en-us/library/ie/windows.devices.enumeration.deviceinformation.createwatcher

应该可行的唯一方法是通过WASAPI – Windows Audio Session API (参见WASAPI示例 )。

可悲的是,WASAPI并没有暴露在c#中,只是在C ++中(但我不确定它是否涵盖了插孔检测。我真的不相信它们会在API级别公开插孔检测……)。

希望这有帮助。