我有一个运行BLE GATT Server的android应用程序,因此android手机将是外围设备,其他设备也可以连接到它。
有时连接工作正常,但是当我尝试将外部设备与手机配对时,经常会出现以下错误:
aclStateChangeCallback: device is NULL, address=81:6C:0F:1A:6C:37, newState=0
bt_btm: btm_ble_read_remote_features_complete: failed for handle: 0x0010, status 0x1a
bt_stack: [ERROR:gatt_db.cc(93)] gatts_check_attr_readability: GATT_READ_NOT_PERMIT
配对后,我已连接到设备,写入了1个特性,并且在读取第二个特性之前,设备已断开连接。通常,断开连接之前的时间是建立连接后9秒钟。
完全相同的设备和应用程序有时会配对并且可以正常工作,有时却不能正常工作。您知道什么可能会导致问题吗?
这是logcat的更多信息:
2019-03-18 18:48:29.132 20305-20329/? E/BluetoothRemoteDevices: aclStateChangeCallback: device is NULL, address=81:6C:0F:1A:6C:37, newState=0
2019-03-18 18:48:29.134 21813-21831/com.test I/GattServerCallback: BluetoothDevice CONNECTED: 81:6C:0F:1A:6C:37, state: 0, newState: 2
2019-03-18 18:48:29.167 20305-20357/? E/bt_btm: btm_ble_read_remote_features_complete: failed for handle: 0x0010, status 0x1a
2019-03-18 18:48:32.629 21813-21813/com.test D/TestApp: getCharacteristicValue characteristic: 3291dcea-0189-3A9c-b193-26ec13029190
2019-03-18 18:48:32.667 20305-20357/? E/bt_stack: [ERROR:gatt_db.cc(93)] gatts_check_attr_readability: GATT_READ_NOT_PERMIT
2019-03-18 18:48:38.867 20305-20357/? I/bt_btm_sec: btm_sec_disconnected clearing pending flag handle:10 reason:8
2019-03-18 18:48:38.870 20305-20329/? W/bt_btif: btif_av_move_idle: ACL Disconnected state 0 bd_addr=81:6C:0F:1A:6C:37 peer_bda=00:00:00:00:00:00
2019-03-18 18:48:38.871 21813-21831/com.test D/BluetoothGattServer: onServerConnectionState() - status=0 serverIf=7 device=81:6C:0F:1A:6C:37
2019-03-18 18:48:38.871 21813-21831/com.test D/GattServerCallback: onDeviceDisconnect
2019-03-18 18:48:38.871 20305-20329/? E/BluetoothRemoteDevices: aclStateChangeCallback: device is NULL, address=81:6C:0F:1A:6C:37, newState=1
2019-03-18 18:48:38.883 21813-21831/com.test I/GattServerCallback: BluetoothDevice DISCONNECTED: 81:6C:0F:1A:6C:37, state: 0, newState: 0
帧37885是断开连接的事件。该消息是连接超时。 帧37883是GATT_READ_NOT_PERMIT事件。 因此,似乎在GATT_READ_NOT_PERMIT事件之后通信停止。
当一切正常时,这是正确流程的图像。不同之处在于缺少具有句柄id = 3(服务已更改)的帧。因此,我想这可能与此事件有关-服务已更改。我不确定何时触发此事件以及中央设备是否请求了此事件,但始终在第一次读取特性之后。
这是带有“断开连接”消息的日志: