java – Android蓝牙 – 无法连接

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

我从来没有能够建立从手机到任何设备的SPP(串行端口)连接.但是,我已经能够使用相当于PuTTY的Mac从设备(我的笔记本电脑)连接到我的手机(唯一的例外是来自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

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

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蓝牙 – 无法连接全部内容,希望文章能够帮你解决java – Android蓝牙 – 无法连接所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。