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

问题描述:

有没有办法在WinRT应用程序中拔出耳机插孔时收到通知?我希望能够在MediaElement播放时阻止声音通过扬声器泄漏出去。如何检测WinRT中未插入的耳机插孔?

插孔检测通知通过IMMNotificationClient :: OnDeviceStateChanged暴露。刚刚在win8桌面上尝试过,当(un)插入设备时,OnDeviceStateChanged被DEVICE_STATE_UNPLUGGED和DEVICE_STATE_ACTIVE调用。可悲的是,wasapi的一部分被记录为桌面只,所以我想没有办法在WinRT中做到这一点。

它应该是可能的唯一方法是通过WASAPI - Windows音频会话API(请参阅WASAPI sample)。可惜的是,WASAPI并没有在C#中暴露,只是在C++中(但我不确定它是否覆盖了插孔检测,我真的不相信它们在API级别暴露插孔检测...... )。

希望得到这个帮助。

尝试以下操作:

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

这适用于WinRT。

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