从带有外围测量设备的Android设备完成 BLE通信的正确方法是什么?
现状:
- 如果我对收到的满意;在特征上写停止测量
- 写关闭请求
- 取消订阅RxBleConnection
- 关闭并断开BluetoothGatt
醇>
当前解决方案存在的问题是,即使我断开并关闭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)
答案 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。
虽然可以减少监督超时,但它需要由外围设备协商,因此必须对固件进行干预。如果这是必须的话,那么正确关闭连接也是一种选择。