【发布时间】:2013-03-12 13:35:38
【问题描述】:
所以我正在开发一个连接到嵌入式蓝牙设备的应用程序。该设备以不同的版本推出,在我的测试设备上,一切正常。通过安全的 rfcomm 套接字进行通信。然而,另一组设备让我毛骨悚然。他们有点失去边界状态。虽然它们被标记为配对,但每次我建立连接时,都会要求我重新输入 PIN 码。这真的是不希望的。此外,这种行为不会发生在所有设备上,而是大多数设备上。实际上,唯一不会忘记 PIN 的设备是 Galaxy Nexus S。三星 Galaxy Nexus、ACE、GIO 和 X10 mini Pro 往往会“忘记”之前配对的设备。使用 API lvl 10,我已经尝试过不安全的 RFCOMM 连接,但没有成功。 我在这里迷路了。有人有想法吗?
最好的问候!
【问题讨论】:
-
您检查过安卓示例蓝牙聊天应用程序吗?它通过蓝牙提供功能齐全的聊天,我已经尝试过了,它可以正常工作。试一试。
-
我希望我能投反对票……呵呵,开个玩笑。但是,是的,我当然做到了。我花了几个小时研究参考实现。我在 AIDL hack 上花费了更多时间来反映隐藏的蓝牙类以建立程序连接。我花了很多时间检查几十个谷歌链接和实现。我花了几个小时阅读 Wiki 上的蓝牙规范以及我在 SO 上可以找到的几乎所有内容......
-
@JohnSmith 不幸的是,没有办法对 cmets 投反对票...回到您的问题,当您尝试检索套接字时,您调用的是哪种方法?
-
我按照我们都知道的蓝牙聊天服务示例的参考实现。连接线程由远程设备初始化。然后,从 createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")) SPP UUID 中检索 BluetoothSocket。当线程被执行时,block 函数调用 socket.connect() 被调用,如果没有抛出异常,函数 connect 被调用。连接线程 get 关闭,打开的套接字被传递给连接线程构造函数。 run() 然后读取输入流。
-
我想重申一下,这种方式非常适用于某些蓝牙设备,而不适用于其他设备。目前有三套远程设备。一套适用于所有手机,另一套仅适用于 Galaxy Nexus S,而第三套设备则不够用。连接和通信适用于所有设备!只是每次建立新连接时,三分之二的设备类型都需要重新输入 PIN 码。