Uwp 如何检测Windows应用商店应用程序中的音频端点变化?

Uwp 如何检测Windows应用商店应用程序中的音频端点变化?,uwp,windows-store-apps,win-universal-app,windows-mobile,Uwp,Windows Store Apps,Win Universal App,Windows Mobile,对于WINDOW UNIVERSAL应用程序,我想检测音频端点是否已更改 对于Windows Mobile应用程序,我使用Windows.Phone.Media.Devices.AudioRoutingManager获取回调并进行音频流路由 对于Windows桌面应用程序,可能需要MMDevice API 对于Windows应用商店应用程序,我不知道如何获取此信息。如何检测这个 任何帮助和有用的建议都将不胜感激。多谢各位 在UWP中,我们可以使用事件检测默认音频渲染设备的更改。此事件包含

对于WINDOW UNIVERSAL应用程序,我想检测音频端点是否已更改

  • 对于Windows Mobile应用程序,我使用Windows.Phone.Media.Devices.AudioRoutingManager获取回调并进行音频流路由

  • 对于Windows桌面应用程序,可能需要MMDevice API

  • 对于Windows应用商店应用程序,我不知道如何获取此信息。如何检测这个

    任何帮助和有用的建议都将不胜感激。多谢各位

在UWP中,我们可以使用事件检测默认音频渲染设备的更改。此事件包含一个参数。通过它的属性,我们可以获得新选择的默认音频渲染设备的ID。一旦我们有了设备ID,我们就可以使用方法来获取。此类允许访问已知的设备属性以及在设备枚举期间指定的其他属性。有关更多信息,请参阅。下面是一个简单的示例:

MediaDevice.DefaultAudioRenderDeviceChanged+=MediaDevice\u DefaultAudioRenderDeviceChanged;
专用异步void媒体设备\u DefaultAudioRenderDeviceChanged(对象发送方,DefaultAudioRenderDeviceChangedEventArgs)
{
System.Diagnostics.Debug.WriteLine($“{args.Id}:{args.Role}”);
var device=wait DeviceInformation.CreateFromIdAsync(args.Id);
//待办事项
}
此外,我们可以使用以下方法获得所有可用的音频端点:

var outputDevices=wait DeviceInformation.findalsync(MediaDevice.GetAudioRenderSelector());

有关更多信息,请参阅。

经过长时间的搜索和混响测试后,我认为创建DeviceWatcher是最相关的解决方案。我试过了,每次添加或删除耳机/麦克风时都会收到通知

创建监视程序后,您将收到与所提供条件匹配的任何设备的以下通知

  • 添加新设备时添加通知
  • 更新通知时 您感兴趣的属性已更改
  • 删除通知时 设备不再可用或与您的筛选器不匹配

这是参考它的方法

嗨@Jay,看来你的建议是个好办法。但您是否在Windows Phone应用商店应用程序中尝试过此功能?它有用吗?对我来说,我试过DeviceWatcher,效果很好。@LuongMinhHiep
DefaultAudioRenderDeviceChanged
是一个通用API,应该可以在移动设备上工作。我已经在Lumia 640上进行了测试,效果很好。@JayZuo你的回答帮助了我!但是,由于使函数异步,我遇到了一个不需要的行为。在我的例子中,当我卸下USB扬声器时,回调会触发两次(我的笔记本电脑连接了一些显示器),两次回调是针对我的集成扬声器或显示器的,这是一种奇怪的行为。因为回调定义是异步的,所以在第一个回调结束之前会触发第二个回调,这会弄乱我的代码逻辑并触发异常。只是想标记该风险=)