gpt4 book ai didi

android - java.io.IOException : Service discovery failed 异常

转载 作者:搜寻专家 更新时间:2023-11-01 08:03:24 26 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,该应用程序在两台配对的智能手机之间使用蓝牙连接。蓝牙逻辑基于著名的 BluetoothChat SDK 示例:一个“服务”类管理服务器 accept() 线程、客户端 connect() 线程和一个线程用于在套接字上读/写。

一切正常,除非我关闭一个 Activity 连接(从客户端或服务器端),然后所有连续尝试启动新连接都将失败并出现此错误:

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 吗?

如果需要,我可以展示代码 fragment 。然而这个问题在逻辑上与 BluetoothChat 非常相似。

最佳答案

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);

&

m = mAdapter.getClass().getMethod("listenUsingRfcommOn", new Class[] { int.class });
tmp = (BluetoothServerSocket) m.invoke(mAdapter, BLUETOOTH_CHANNEL);

嗯……我不是 BT 专家,但我知道我的代码可以在没有 UUID 的情况下使用反射。如果你想要干净的东西,我认为这不是一个好的解决方案,但我只知道,就我而言,它有效(在 2.3.6 上):)

关于android - java.io.IOException : Service discovery failed 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com