蓝牙连接仅适用于第一次

时间:2011-03-22 15:37:09

标签: android bluetooth

我正在尝试使用蓝牙(SPP)为medical device开发Android应用程序。我使用BluetoothChat作为起点(另见earlier post)。现在我觉得我面临一个奇怪的问题而且我也很难描述它。在Nexus S上进行测试。

完成测量后,医疗设备会检查其内存中是否有蓝牙地址以及有关先前配对设备的其他信息。如果发现它将尝试启动连接(当电话上的应用程序正在侦听连接时)然后传输数据,否则它将启动查询过程。

第一次正常工作:配对程序,建立连接和传输数据。收到数据后,应用程序回复ACK包,连接终止。

剩下的时间它不起作用:在测量后我可以在LogCat中看到手机从设备收到信号(就像第一次一样),所以我知道设备保存了手机的蓝牙地址。似乎系统忽略了信号(或者至少没有发生任何事情),没有建立连接,因此即使我使用accept - BluetoothServerSocket的方法也没有传输数据,就像它使用时一样作品。如果我从手机中删除配对记录,则此信号开始配对程序,设备再次配对,但它们仍然不会建立连接也不会传输数据。我想有关信号的消息代表了尝试建立连接,但有些事情是错误的。日志中的消息与连接成功时的消息相同,可以在LogCat中看到:

  

03-22 14:21:55.335:ERROR / BluetoothEventLoop.cpp(114):event_filter:收到的信号org.bluez.Device:PropertyChanged来自/ org / bluez / 4123 / hci0 / dev_00_A0_96_2D_05_E8

这是一个相当混乱的错误消息,当它也有效时会出现在日志中。

奇怪的是,它在第​​一次成功配对时有效,但之后再也没有。当数据被传输并且设备接收到ACK时,它保存蓝牙地址“和其他有用信息”。我能够再现成功的“第一次”的唯一方法是将医疗设备与另一台设备配对,然后再将它与手机上的应用程序配对。

我对实际导致此问题的原因感到困惑。 有没有人有任何线索?

如果问题是由医疗设备引起的,而不是手机,我担心我的问题有点特别让别人熟悉。我以为它可能与Link Key或Channel有关?但另一方面,正如我所说,如果我从手机中删除配对,我会再次收到配对请求。

医疗设备陈旧,使用蓝牙1.2。现在让我感到震惊的是,我应该看看是否存在与此相关的任何连接相关问题。 使用蓝牙1.2的设备是否有另一项政策,即在配对时要存储哪些信息?

目前我觉得我正在努力解决一个我不完全理解的问题,但如果我以后会理解,我当然会得到我的结论。我希望我没有忘记重要的细节。

提前致谢/ F

2 个答案:

答案 0 :(得分:1)

嗨fredricus我的问题类似于你的运行蓝牙服务,当蓝牙打开时,它继续监听数据。我已经解决了将Android设备连接到医疗设备的问题,因为你提到你已经使用了反射。但是如果医疗初始连接将能够连接到Android设备。

答案 1 :(得分:0)

听起来问题在于医疗设备,它无法与已配对的设备重新建立连接(即重新认证)。 我不认为成为1.2应该是重要的。这些程序旨在向后兼容,以便所有蓝牙版本相互协作。 您可能需要bluetooth sniffer trace来检查无线通信情况,以确定问题是否在医疗设备方面。

另一种选择是检查android是否有任何方法可以打开更详细的蓝牙交互记录并启用它。 Android消息的默认日志非常高,并没有提供太多细节