使用BLE设备完成Android的蓝牙通信

时间:2018-01-23 10:06:57

标签: android bluetooth bluetooth-lowenergy android-bluetooth rxandroidble

从带有外围测量设备的Android设备完成 BLE通信的正确方法是什么?

现状:

  
      
  1. 如果我对收到的满意;在特征上写停止测量
  2.   
  3. 写关闭请求
  4.   
  5. 取消订阅RxBleConnection
  6.   
  7. 关闭并断开BluetoothGatt
  8.   

当前解决方案存在的问题是,即使我断开并关闭GATT,它仍然可以在设备上保持连接30秒。 (下一次测量无法立即开始)

更新日志:

D/RxBle#ConnectionOperationQueue:   QUEUED CharacteristicWriteOperation(222504075)
D/RxBle#ConnectionOperationQueue:  STARTED CharacteristicWriteOperation(222504075)
I/RxBle#ConnectionOperationQueue: Connection operations queue to be terminated (80:EA:CA:00:00:10)
D/RxBle#ClientOperationQueue:   QUEUED DisconnectOperation(90705849)
D/RxBle#ClientOperationQueue:  STARTED DisconnectOperation(90705849)
D/BluetoothManager: getConnectionState()
D/BluetoothManager: getConnectedDevices
D/BluetoothGatt: cancelOpen() - device: 80:EA:CA:00:00:10
D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=6 device=80:EA:CA:00:00:10
D/RxBle#BluetoothGatt: onConnectionStateChange newState=0 status=0
D/BluetoothGatt: setCharacteristicNotification() - uuid: 3f3e3d3c-3b3a-3938-3736-353433323130 enable: false
E/TestConnection: changeNotificationDisconnected from 80:EA:CA:00:00:10
D/RxBle#ConnectionOperationQueue: FINISHED CharacteristicWriteOperation(222504075)
D/RxBle#Executors$RunnableAdapter: Terminated.
D/BluetoothGatt: close()
D/BluetoothGatt: unregisterApp() - mClientIf=6
D/RxBle#ClientOperationQueue: FINISHED DisconnectOperation(90705849)

1 个答案:

答案 0 :(得分:3)

你的方法很好。

问题似乎与您的外围设备有关。似乎没有发送任何信息。如果在外围设备上正确实施,BluetoothGattCallback应该会收到.onConnectionStateChange() status=19 corresponds to

#define GATT_CONN_TERMINATE_PEER_USER       HCI_ERR_PEER_USER               /* 0x13 connection terminate by peer user  */

因为Android BLE堆栈不认为通信已经停止,所以等待监督超时启动。默认为Supervision Timeout is hardcoded 20 seconds

虽然可以减少监督超时,但它需要由外围设备协商,因此必须对固件进行干预。如果这是必须的话,那么正确关闭连接也是一种选择。