我正在使用两个配对智能手机之间的蓝牙连接来开发一个 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 错误可能是由cancelDiscovery()
Android 文档建议调用 before引起的connect()
。我认为这failed UUID channel lookup
是真正的问题,但我不知道如何解决这个问题。我应该使用另一个(众所周知的?)UUID吗?
如果需要,我可以显示代码片段。然而这个问题在逻辑上与蓝牙聊天非常相似。