java - Android 蓝牙 - 无法连接

标签 java android bluetooth serial-port uuid

我正在开发一个使用蓝牙连接到设备并发送/接收数据的应用程序。我正在使用 Nexus One 手机进行所有测试。

我从未能够建立从我的手机到任何设备的 SPP(串行端口)连接。但是,我已经能够使用相当于 PuTTY 的 Mac 从设备(我的笔记本电脑)连接到我的手机(唯一的异常(exception)是 Marketplace 中的“蓝牙文件传输”应用程序似乎工作,但我不认为使用 RFCOM/SPP...)。

我一直在我的 LogCat 日志中看到这条消息:

ERROR/BluetoothService.cpp(78): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)

还有这些:

java.io.IOException: Operation Canceled
java.io.IOException: Software caused connection abort

我试过使用“00001101-0000-1000-8000-00805F9B34FB”的 UUID,我也试过使用:

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

方法而不是 device.createRfcommSocketToServiceRecord(UUID); 也一样——运气不好。

我正在使用 BluetoothChat example以及该代码的变体来完成我的所有测试......

解决方案或建议会很棒......或者甚至是我可以在手机上运行的一些测试代码的更好/更简单的示例,或者 python 脚本或我可以在我的计算机上运行以帮助调试的东西?

谢谢!我希望这不是 Android 操作系统的错误,但如果是,我希望找到解决方法。


编辑:我还应该注意到,大多数设备在蓝牙设置中显示为“已配对,但未连接”。


编辑 2:解决方案似乎只是禁用任何蓝牙监听。有关详细信息,请参阅我的回答帖子。

最佳答案

事实证明,解决方案是禁用蓝牙服务的服务器功能。通过仅使用 createRfcommSocketToServiceRecord 而从不调用 listenUsingRfcommWithServiceRecord(在 BluetoothChat 示例中,这意味着从不启动“AcceptThread”),问题得到解决。

即使这两个调用应该完全分开并且彼此没有影响(根据 Android 文档),只需注释掉 listenUsingRfcommWithServiceRecord 就可以解决我认为不相关的问题。

我可以未经编辑地使用蓝牙聊天程序,它无法与我测试过的任何蓝牙设备(笔记本电脑、台式机、耳机等)建立传出连接,但如果我删除那个东西,它就可以完美运行作为客户。

无论如何,我希望这对遇到同样问题的其他人有所帮助。这一定是 Android 操作系统的错误,或者可能是 Nexus One 上的固件。

关于java - Android 蓝牙 - 无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3072776/

相关文章:

java - 如何在一定时间后停止计时器?

java - 使用 PDFBox、FontBox 等将 PDF 解析为文本时的字体问题

java - jittable 的大小增加是否与 android 上的内存泄漏相关?

android - BluetoothAdapter.getDefaultAdapter() 不返回 null

android - onreceive() 不适用于 Android O

java - 使用客户端登录授权 Google 云端硬盘服务 java?

java堆空间和消息丢失

android - 从 App Engine 将图像数据发送到 Android 应用程序

java - 我不断收到 com.android.volley.RequestQueue.add 空对象引用错误

安卓蓝牙 : knowing MTU on the GattServer side