2011-03-22 65 views
1

我正在尝试使用蓝牙(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/bluez的/ 4123/hci0/dev_00_A0_96_2D_05_E8

这是相当混乱它在日志中的错误信息,如果存在的话它的工作原理也是如此。

奇怪的是,它第一次配对成功,但从未再次发生。当数据传输并且设备收到ACK时,它将保存蓝牙地址“和其他有用的信息”。我能够复制成功的'第一次'的唯一方法是将医疗设备与其他设备配对,然后再将其与应用程序再次配对。

我很困惑究竟是什么导致了这个问题。 有没有人有任何线索?

我担心我的问题有点特殊,如果遇到问题的原因是医疗设备而不是手机,那么请他人熟悉。我在想这可能与Link Key或Channel有关?但另一方面,正如我所说的,如果我从电话中删除配对,我会再次收到配对请求。

医疗设备是旧的,使用蓝牙1.2。现在,我觉得我应该看看是否有任何与连接有关的问题。 是否可能是使用蓝牙1.2的设备具有另一个策略,即配对时要存储哪些信息?

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

预先感谢/ F

回答

0

听起来就像是问题是与医疗装置,它不能重新建立与已配对设备连接(即重新认证)。 我不认为1.2是重要的。这些程序被设计为向后兼容,以便所有蓝牙版本相互协作。 您可能必须获得bluetooth sniffer trace以检查可能会发生的情况,以验证问题是否出现在医疗设备端。

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

+0

谢谢你的好建议。我没有想到这样一个计划。我可能已经在这个问题上停留了很长一段时间,并在尝试深入挖掘时失去了广泛的视野。我会尝试一下,看看我能从中得到什么,并获得有关进展的更多信息。 – Fredricus 2011-03-23 07:56:14

+0

我无法获得一个嗅探器,但我已经与制造商通话,问题是设备保存套接字,即通道,而配对和使用listenUsingRfcommWithServiceRecord意味着系统将分配一个未使用的RFCOMM通道聆听“。所以,我需要设置通道或关闭并创建一个新的服务器套接字,直到获得正确的Rfcomm通道。所以这是我的新问题。我在看[这个问题](http://stackoverflow.com/questions/4887307/android-rfcomm-socket-on-fixed-channel)但我仍然希望有一个更好的解决方案? – Fredricus 2011-03-28 08:46:14

+0

我还没有找到这个,所以我猜不是,但是..是否有可能在标准API的帮助下检查Rfcomm频道的数量? – Fredricus 2011-03-28 08:47:54

1

嗨fredricus我的问题是类似于你的即时通讯运行一个蓝牙服务,它保持在蓝牙on.u数据监听已经解决了问题将Android设备连接到医疗设备,因为您提到您已经使用了反射。但是如果医疗启动连接,它将能够连接到Android设备。

+0

那么,要清楚:在我的情况下,医疗设备连接到我的Android应用程序提供的蓝牙服务。我设法让医疗设备连接到它,我用反射来获取端口(RFCOMM通道)。所以,如果这是你的问题,你应该尝试[这里]找到的反射代码(http://code.google.com/p/android/issues/detail?id=5427)。 – Fredricus 2011-03-30 07:08:32

+0

此外,如果医疗设备启动连接,请注意您必须小心服务名称和UUID(用于设置协议/配置文件),以确保设备实际尝试连接到您的蓝牙服务。您可以在[此链接](http://bluecove.org/bluecove/apidocs/javax/bluetooth/UUID.html)中找到相应Profile/Protocol的UUID:s。 – Fredricus 2011-03-30 07:23:01