尝试将Android设备用作GATT服务器时出现GATT_READ_NOT_PERMIT错误

时间:2019-03-18 17:05:54

标签: android bluetooth-lowenergy gatt android-ble bluetooth-gatt

我有一个运行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

这是HCI日志的图片: enter image description here

帧37885是断开连接的事件。该消息是连接超时。 帧37883是GATT_READ_NOT_PERMIT事件。 因此,似乎在GATT_READ_NOT_PERMIT事件之后通信停止。

当一切正常时,这是正确流程的图像。不同之处在于缺少具有句柄id = 3(服务已更改)的帧。因此,我想这可能与此事件有关-服务已更改。我不确定何时触发此事件以及中央设备是否请求了此事件,但始终在第一次读取特性之后。

enter image description here

这是带有“断开连接”消息的日志:

enter image description here

0 个答案:

没有答案