开发低功耗蓝牙 (Bluetooth Low Energy) 时,一般的流程是:

  1. 通过 Context 拿到 BluetoothManager,通过 BluetoothManager 拿到 BluetoothAdapter
  2. 使用 BluetoothAdapter 扫描设备,在 BluetoothAdapter.LeScanCallback 的 onLeScan 方法中筛选得到目标 BluetoothDevice
  3. 调用 BluetoothAdapter 的 stopLeScan 方法停止扫描
  4. 使用扫描得到的 BluetoothDevice 发起连接

然而,马上就会发现,连接失败了,在 BluetoothGattCallback 的 onConnectionStateChange 中会得到 newState 状态是 133。

惊不惊喜,意不意外

目前找到唯一的解决办法是: 调用 BluetoothAdapter 的 stopLeScan 后,发起一个延时任务,等一会再调用 BluetoothDevice 的 connectGatt 向设备发起连接请求。

同样地,BluetoothGattCallback 中的 onServicesDiscovered 找到 Service 之后,不可以马上发送数据,要等会…

评论

退出登录