所以我正在尝试连接到 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 连接到蓝牙设备)目前无法完成,这对吗?如果没有,我做错了什么?