我无法通过蓝牙连接两台 Android 设备,这仅在它们之前已配对时才会发生。我正在运行一个作为服务器,另一个作为客户端。
这是服务器端的事情顺序:
- 检查各种蓝牙状态(适配器可用、已启用等)。
- 使用我选择的预定义 UUID 调用 listenUsingRfcommWithServiceRecord()。
- 请求使设备可发现
- 由于可发现是异步发生的,因此我调用 accept() 并等待传入连接。
在客户端:
- 检查各种蓝牙状态(适配器可用、已启用等)。
- 对于 getBondedDevices() 中的每个设备,我将 getName() 与服务器名称进行比较。如果匹配,请跳至步骤 6。
- 开始 BT 发现
- 对于每个发现的设备(请注意,此处未显示来自 2a 的配对设备),将设备名称与服务器名称进行比较。如果匹配,请转到步骤 6。
- 取消发现
- 在步骤 2 中找到的设备上,使用与服务器端相同的预定义 UUID 调用 createRfcommSocketToServiceRecord()。
- 调用 connect() 并等待它返回一个连接的套接字。
当客户端和服务器以前从未配对过时,上述过程对我来说非常有效。但是,Android 将它们注册到设备列表后,它们将不可避免地在 connect()/accept() 阶段超时。
几天来我一直在寻找解决方案,并尝试了很多东西,包括这个: 连接到已经配对的蓝牙设备
反射方法对我也不起作用。似乎 connect() 会立即返回,但是当我尝试 getOutputStream() 时出现异常。在 accept() 方面,它甚至没有注册有人尝试连接。我真的需要一些帮助或指示,以便在设备之前配对后建立连接。
以下是有关设备的一些信息:
- 我正在两部 LG G2X 手机上测试服务器和客户端。
- 它们都在 Android 2.3.3 上运行,对应 API 级别 10。
- 同样,在我在设置中手动取消配对设备后,上述方法有效。
提前谢谢你。我在 Android 和蓝牙方面大约 2 周大,所以如果您发现任何缺失的步骤或最佳实践,请同时指出它们。