我正在尝试用 C# 编写一个 uwp 应用程序,该应用程序必须连接到将与计算机配对的任何蓝牙设备(不是 LE)。
我从复制 Microsoft RFComm Chat 示例应用程序开始,但遇到了 here (它太慢了,有时会无缘无故地断开连接)。这个 SO 用户通过使用 SerialDevice 方法解决了这个问题,所以我实现了。
从 this SO answer 开始,我发现 Microsoft 建议使用 DeviceWatcher 来查找所有已连接的蓝牙设备,因此我实施了该方法,并且没有问题。我得到了蓝牙设备的完整列表作为 DeviceInformation 对象。
但是,然后我尝试使用选定的 DeviceInformation 对象来创建 SerialDevice,它总是因“数据无效”异常而失败。
SerialDevice sd = await SerialDevice.FromIdAsync(myDeviceInfo.Id);
给予
<块引用>“Die Daten sind unzulässig。(来自 HRESULT 的异常:0x8007000D)”
("数据无效")
myDeviceInfo.Id 的内容是 Bluetooth#Bluetoothc0:b6:f9:c1:62:62-00:80:25:40:95:7b
我也试过直接将这个字符串作为字符串参数输入,结果相同。该设备已经与计算机配对,并通过此 Id 字符串和 RfcommService 代码成功使用了多次。
在清单中,我添加了以下几行:
<Capabilities>
<DeviceCapability Name="bluetooth.rfcomm">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
如何成功获取蓝牙设备的 SerialDevice 对象?
编辑 1:将 DeviceCapability 的名称更正为“串行通信”。我仍然遇到同样的异常。