是否可以连接到WPF应用程序中的BTLE设备?

时间:2017-07-31 18:50:30

标签: c# wpf windows-10-universal btle

所以我试图连接到Polar H7心率监测器,我需要使用WPF应用程序来完成它。我正在使用Windows 10。

现在我已经使用UWP应用程序完成了这项工作并且完美运行,但我想使用WPF(如果可能的话)来做同样的事情。

我找到this post关于如何在WPF / winforms / etc中使用Windows 10 API并且认为完美,这就是我需要的。我成功地将蓝牙API添加到我的WPF项目中并投入了适用于我的UWP项目的代码,但它不起作用。

以下是我的代码片段,直到它停止工作:

        DeviceInformation _devicePolar = null;
        string StatusInformation;
        string StatusInformation2;
        var devices = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.HeartRate));
        foreach(var d in devices)
        {
            Debug.WriteLine(d.Name + " " + d.Id);
        }
        if (null == devices || devices.Count <= 0) return;
        foreach (var device in devices.Where(device => device.Name == "Polar H7 DCB16C16"))
        {
            _devicePolar = device;
            StatusInformation = string.Format("Found {0}", _devicePolar.Name);
            break;
        }
        if (_devicePolar == null) return;
        var service = await GattDeviceService.FromIdAsync(_devicePolar.Id);
        if (service == null) return;

现在,这个电话

await GattDeviceService.FromIdAsync(_devicePolar.Id) 

返回null。我在制作UWP应用程序时遇到了同样的问题而且我发现这是因为我忘了扔这个

  <Capabilities>
    <Capability Name="internetClient" />
    <DeviceCapability Name="bluetooth" />
  </Capabilities>

进入我的清单文件。一旦我把它放在(在我的UWP应用程序上)它工作正常。但是在WPF应用程序中似乎没有相应的位置。现在回到关于如何将Win 10库添加到WPF的博客文章中,这一点似乎告诉我一直如此:

  

您不能使用的第二组API依赖于应用程序包的标识。 UWP应用程序具有包标识,而PC软件则没有。可以在应用清单文件中找到包标识信息。

进一步研究在该帖子中链接的微软主题,它确实指出蓝牙“目前并非所有API都适用于打包的应用程序”。这非常不具体。

另外应该提一下,在尝试之前我尝试使用32feet库,但我的设备根本没有显示其他设备(不是LE),所以我假设32feet不支持BTLE。我发现this对32feet问了同样的问题,这就是让我尝试上面详细说明的内容,但我仍然不能100%清楚我是否可以简单地使用32feet连接到BTLE设备

所以我的问题是,我是对的,我正在尝试做什么(使用Windows 10 API连接到蓝牙设备的WPF应用程序)目前无法完成?如果没有,我做错了什么?

1 个答案:

答案 0 :(得分:0)

两年后更新,问题发布了:我认为仍然没有支持WPF蓝牙LE的库。一个很直接的证明是,UWP下的Windows设置支持蓝牙LE设备,而Windows 10上的控制面板则不支持。

我现在能想到的唯一解决方案是购买具有虚拟COM端口功能的蓝牙加密狗,因此理想情况下,我可以像使用串行连接那样与BLE设备通信。尚未测试,如果可行,将在以后更新。