4

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

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

我发现这篇关于如何在 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 是依赖于应用程序包标识的 API。UWP 应用具有程序包标识,而 PC 软件没有。包身份信息可以在应用清单文件中找到。

并进一步研究帖子中链接的 Microsoft 主题,它确实指定了关于蓝牙的“打包应用程序目前不支持所有 API”。这是非常不具体的。

还应该提到,在尝试此之前,我尝试使用 32feet 库,但我的设备根本没有显示,而其他设备(不是 LE)则显示,所以我假设 32feet 不支持 BTLE。我发现对 32feet 提出了同样的要求,这就是让我尝试上面详细介绍的内容的原因,但我仍然不是 100% 清楚我是否可以简单地使用 32feet 连接到 BTLE 设备。

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

4

1 回答 1

1

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

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

于 2019-05-27T22:08:55.547 回答