我正在开发一个使用蓝牙连接到设备并发送/接收数据的应用程序.我正在使用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上的固件.