【发布时间】:2011-07-20 14:35:12
【问题描述】:
我正在尝试使用蓝牙 (SPP) 为 medical device 开发一个 Android 应用程序。我以 BluetoothChat 作为起点(另请参阅 earlier post)。现在我觉得我面临一个奇怪的问题,我也很难描述它。在 Nexus S 上进行测试。
完成测量后,医疗设备会检查其内存中的蓝牙地址和有关先前配对设备的其他信息。如果找到,它将尝试启动连接(当手机上的应用程序正在侦听连接时)然后传输数据,否则它会启动查询过程。
第一次正常:配对过程,建立连接和传输数据。收到数据后,应用程序会回复一个 ACK 包并终止连接。
其余时间不起作用:测量后,我可以在 LogCat 中看到手机从设备接收到信号(就像第一次一样),所以我知道设备保存了手机的蓝牙地址。系统似乎忽略了信号(或至少没有任何反应),没有建立连接,因此即使我使用BluetoothServerSocket 的accept 方法与它工作时的方式相同,也没有传输数据。如果我从手机中删除配对记录,此信号将启动配对过程并且设备再次配对,但它们仍然不会建立连接或传输数据。我猜关于信号的消息表示尝试建立连接,但出现了问题。日志中的消息与连接成功时的消息相同,可以在LogCat中看到:
03-22 14:21:55.335: ERROR/BluetoothEventLoop.cpp(114): event_filter: 收到信号 org.bluez.Device:PropertyChanged from /org/bluez/4123/hci0/dev_00_A0_96_2D_05_E8
令人困惑的是,它是一条错误消息,并且在它正常工作时会显示在日志中。
奇怪的是,他们第一次成功配对时它就起作用了,但之后就再也没有了。当数据被传输并且设备接收到 ACK 时,它会保存蓝牙地址“和其他有用的信息”。我可以重现成功的“第一次”的唯一方法是将医疗设备与另一台设备配对,然后再次将其与手机上的应用程序配对。
我对究竟是什么导致了这个问题感到困惑。 有人知道吗?
如果问题是由医疗设备而不是手机引起的,恐怕我的问题有点具体到让其他人熟悉。我在想它可能与链接密钥或频道有关?但另一方面,正如我所说,如果我从手机中删除配对,我会再次收到配对请求。
医疗设备较旧,使用蓝牙 1.2。现在让我感到震惊的是,我应该看看是否有任何与连接相关的问题。 可能是使用蓝牙 1.2 的设备在配对时存储哪些信息的另一个策略?
目前我觉得我正在为一个我不完全理解的问题而苦苦挣扎,但如果我以后能理解的话,我当然会带着我的结论回来。我希望我没有忘记重要的细节。
提前致谢/F
【问题讨论】: