(Dis)连接蓝牙设备与Windows.Devices.Bluetooth.Rfcomm (WP8.1)

Posted

技术标签:

【中文标题】(Dis)连接蓝牙设备与Windows.Devices.Bluetooth.Rfcomm (WP8.1)【英文标题】:(Dis)Connecting bluetooth devices with Windows.Devices.Bluetooth.Rfcomm (WP8.1) 【发布时间】:2015-01-14 05:30:22 【问题描述】:

在 Windows Phone/Desktop 8.1 上连接和断开蓝牙设备会产生各种结果。我一直在使用Windows.Devices.Bluetooth.Rfcomm 命名空间,并尝试连接多个具有不同蓝牙版本/类的设备。

1.2 版(1 类和 2 类) 2.0 版(1 类和 2 类) 2.1 版(1 类和 2 类) 在诺基亚 Lumia 625 和 Lumia 635、戴尔 Latitude E6500 和戴尔 Precision M6400 上测试。

每当我尝试连接到 2.0 或 2.1 设备时,都会出现问题。我第一次尝试连接到每个设备时,一切都会正常并且连接将打开。当我随后关闭连接并重新连接设备时,问题就开始了。 在重新连接期间,连接永远不会打开,调试器将抛出 System.Exception :

> Message: No further data is available.

此外,当连接失败时,Windows 8.1 设备将继续尝试(不成功)自行连接到蓝牙设备,即使我自己的应用程序已终止。有时,Windows 8.1 设备也会将蓝牙设备显示为已连接,而设备在视觉上显示它已不再连接。重新连接蓝牙设备的唯一方法是取消配对并关闭/重新启动 Windows 设备上的蓝牙。

每当我在连接失败后尝试重新调用DeviceInformation 时,它都会拒绝返回我之前尝试连接的设备。

> Message: The service cannot be found in the specified name space.

奇怪的结果,1.2 设备完美运行。

清单文件:

<m2:DeviceCapability Name="bluetooth.rfcomm">
  <m2:Device Id="any">
    <m2:Function Type="serviceId:00001101-0000-1000-8000-00805F9B34FB"/>
  </m2:Device>
</m2:DeviceCapability>

选择设备:

Guid RfcommChatServiceUuid = Guid.Parse("00001101-0000-1000-8000-00805F9B34FB");
await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.FromUuid(RfcommChatServiceUuid)));

正在连接:(id = chatserviceid)

StreamSocket _socket;    
RfcommDeviceService service = await RfcommDeviceService.FromIdAsync(deviceInformation1._id);
await _socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);

断开连接:

this._socket.Dispose();
this._socket = null;

我研究了 MSDN、代码示例、演示、频道 9 视频和 ***,没有资源可以告诉我 Windows.Devices.Bluetooth.Rfcomm 是否存在问题。

有没有人认识到这些奇怪的结果?难道我做错了什么?

Similar problem was observed here

Link to MSDN issue

更新:使用 Windows Phone 8.1 GDR2 是一种可能的解决方案。

注意:对于我自己和其他几个人来说,这个更新仍然会出现同样的问题。

【问题讨论】:

您好 gl77 - 我正在处理您的 MSDN 帐户上的这个问题。我更新了主题,当我知道更多信息时会更新你。 您找到解决方案了吗?我遇到了类似的问题,它可以在一台设备上运行,但不能在另一台设备上运行。需要注意的是,可以运行的设备运行英特尔的蓝牙驱动程序:17.0.1401.422,而无法运行的设备运行的是英特尔的蓝牙驱动程序:17.0.1405.460。 我还没有找到解决方案,Matt 的团队仍在努力解决这个问题。让我们希望在不久的将来能够修复。 硬件制造商指导我删除了 17.0.1405.460 版本的英特尔蓝牙驱动程序并安装了较旧的 17.0.1401.422 版本。一旦我们这样做了,我的应用程序又开始工作了。所以,对我来说,问题在于较新的驱动程序。 能否附上 MSDN 帖子的链接? 【参考方案1】:

我会试试 CoolTerm,看看它是否适合你。我在通过 USB 连接将扬声器与内部的 Sigma DSP 芯片连接时遇到了类似的问题,因此,如果您无法看到外部设备,则可能是该设备与您的计算机不兼容。下载 CoolTerm 并转到选项,在串行端口下,您应该将端口更改为所需的连接(蓝牙、USB 等)然后根据需要编辑选项并转到主窗口并点击连接,看看它是否适合您。

【讨论】:

以上是关于(Dis)连接蓝牙设备与Windows.Devices.Bluetooth.Rfcomm (WP8.1)的主要内容,如果未能解决你的问题,请参考以下文章

求教Android蓝牙与多个设备连接问题

Android蓝牙协议-蓝牙配对与连接

在 Android 中实现与多个设备的蓝牙连接的最佳方法是啥?

Android中的蓝牙连接与两台设备

安卓怎样连接两个蓝牙?

安卓系统 蓝牙 与车载蓝牙的连接