【发布时间】:2013-07-23 13:52:55
【问题描述】:
我正在开发一个 Android 应用程序,该应用程序在两个配对的智能手机之间使用蓝牙连接。蓝牙逻辑基于著名的 BluetoothChat SDK 示例:一个“服务”类管理服务器线程 accept()、客户端线程 connect() 和套接字上的读/写线程。
一切正常,除非我关闭一个活动连接(从客户端或服务器端),然后所有连续尝试启动新连接都会失败并出现此错误:
java.io.IOException: Service discovery failed
经过一些研究,我开始认为这是 UUID 的问题。我正在使用 BTChat 示例的 UUID (fa87c0d0-afac-11de-8a39-0800200c9a66),但问题仍然存在于另一个随机 UUID(它是 31ef5990-dc20-11e2-a28f-0800200c9a66)。
这里是相关的客户端logcat。 (客户端connect()失败了):
E/BluetoothService.cpp: stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
D/BluetoothService: Cleaning up failed UUID channel lookup: 30:17:C8:A7:C6:C3 fa87c0d0-afac-11de-8a39-0800200c9a66
java.io.IOException: Service discovery failed
D-Bus 错误可能是由 Android 文档建议在 connect() 之前调用的 cancelDiscovery() 引起的。我认为failed UUID channel lookup 是真正的问题,但我不知道如何解决这个问题。我应该使用另一个(众所周知的?)UUID 吗?
如果需要,我可以显示代码 sn-ps。然而这个问题在逻辑上与蓝牙聊天非常相似。
【问题讨论】:
标签: android sockets bluetooth uuid