Android蓝牙接受()/ connect()与已配对的设备

o.c*_*.c. 6 android bluetooth android-sdk-2.3 bluetooth-lowenergy pairing

我无法通过蓝牙连接两台Android设备,只有在之前配对时才会发生.我正在运行一个作为服务器,另一个作为客户端.

以下是服务器端的一系列事项:

  1. 检查各种蓝牙状态(适配器可用,已启用等).
  2. 使用我选择的预定义UUID调用listenUsingRfcommWithServiceRecord().
  3. 请求使设备可被发现
  4. 由于可被发现异步发生,我调用accept()并等待传入​​连接.

在客户端:

  1. 检查各种蓝牙状态(适配器可用,已启用等).
  2. 对于getBondedDevices()中的每个设备,我将getName()与服务器名称进行比较.如果匹配,请跳至步骤6.
  3. 开始BT发现
  4. 对于每个已发现的设备(请注意,2a中的配对设备未显示在此处),请将设备名称与服务器名称进行比较.如果匹配,请转到步骤6.
  5. 取消发现
  6. 在从步骤2找到的设备上,使用服务器端使用的相同预定义UUID调用createRfcommSocketToServiceRecord().
  7. 调用connect()并等待它返回连接的套接字.

当客户端和服务器之前从未配对时,上述过程对我来说非常好.但是,Android在设备列表中注册后,它们将不可避免地在connect()/ accept()阶段超时.

我一直在寻找解决方案几天,并尝试了很多东西,包括这一个: 连接到已经配对的蓝牙设备

反射方法对我也不起作用.似乎connect()会立即返回,但是当我尝试getOutputStream()时,我得到一个异常.在accept()方面,它甚至没有注册有人试图连接.我认真地需要一些帮助或指针来让设备在之前配对后建立连接.

以下是有关设备的一些信息:

  • 我在两台LG G2X手机上测试服务器和客户端.
  • 它们都运行在Android 2.3.3上,对应于API级别10.
  • 再次,上述工作在我在设置中手动取消配对后工作.

提前谢谢你.我在Android和蓝牙方面大约有两周的时间,所以如果您发现任何缺失的步骤或最佳做法,请同时指出它们.

o.c*_*.c. 7

在客户端,当我尝试连接到绑定设备时,我只是在我找到的BluetoothDevice上调用它BluetoothAdapter.getBondedDevices().这不起作用.

为了正确建立蓝牙连接,我必须做一些类似于下面的伪代码:

BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices();
BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress());

BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID);
socket.connect();
Run Code Online (Sandbox Code Playgroud)

我完全按照蓝牙聊天示例:蓝牙聊天服务得到了这个答案.为什么它不能在设备上工作getBondedDevices()超出我的范围.也许对Android有更多了解的人可以回答这个问题.