【发布时间】: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 视频和 StackOverflow,没有资源可以告诉我 Windows.Devices.Bluetooth.Rfcomm 是否存在问题。
有没有人认识到这些奇怪的结果?难道我做错了什么?
更新:使用 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 帖子的链接?
标签: c# xml windows bluetooth windows-phone