Android BLE问题:不支持的传输用于后台连接

4nt*_*ine 8 android bluetooth bluetooth-lowenergy

我正在使用BLE设备处理BLE:首先发现它然后尝试连接.但是我收到错误:

10-03 17:17:45.641    3854-3930/? E/bt-att? Unsupported transport for background connection
10-03 17:17:45.641    3854-3930/? E/bt-btif? bta_gattc_init_bk_conn failed
Run Code Online (Sandbox Code Playgroud)

并且我无法连接(注意133在断开连接之前奇怪的状态(0)):

10-03 17:17:45.641  17474-18298/com.icrealtime.allie D/BluetoothGatt? onClientConnectionState() - status=133 clientIf=7 device=08:00:00:3F:B5:F1
Run Code Online (Sandbox Code Playgroud)

完整日志:

10-03 17:17:45.601    1029-1029/? D/STATUSBAR-WifiQuickSettingButton? onWifiSignalChanged enabled=true enabledDesc:"IC"
10-03 17:17:45.611  17474-17474/com.icrealtime.allie D/BleRpcConnectionFactory? Device found: name=Allie-RA222222222, mac_address=08:00:00:3F:B5:F1, other=08:00:00:3F:B5:F1
10-03 17:17:45.621  17474-17474/com.icrealtime.allie D/BleRpcConnectionFactory? Found and accepted BLE device: 08:00:00:3F:B5:F1
10-03 17:17:45.621  17474-17474/com.icrealtime.allie D/BleRpcConnectionFactory? Stopping discovery
10-03 17:17:45.621  17474-17474/com.icrealtime.allie D/BluetoothAdapter? stopLeScan()
10-03 17:17:45.621    3854-4177/? D/BtGatt.GattService? stopScan() - queue size =1
10-03 17:17:45.621    3854-4052/? D/BtGatt.ScanManager? filter size is 1
10-03 17:17:45.621    3854-4052/? D/BtGatt.ScanManager? delete FilterIndex - 4
10-03 17:17:45.621    1029-1029/? D/StatusBar.NetworkController? refreshSignalCluster - setNWBoosterIndicators(false)
10-03 17:17:45.621    3854-3932/? D/bt_vendor? op for 7
10-03 17:17:45.621    3854-3932/? D/bt_upio? BT_WAKE is asserted already
10-03 17:17:45.621    3854-3929/? D/BtGatt.GattService? onScanFilterParamsConfigured() - clientIf=7, status=0, action=1, availableSpace=16
10-03 17:17:45.621    3854-3929/? D/BtGatt.ScanManager? callback done for clientIf - 7 status - 0
10-03 17:17:45.621    3854-3862/? D/BtGatt.GattService? unregisterClient() - clientIf=7
10-03 17:17:45.621    3854-3932/? D/bt_vendor? op for 7
10-03 17:17:45.621    3854-3932/? D/bt_upio? BT_WAKE is asserted already
10-03 17:17:45.621    3854-4052/? D/BtGatt.ScanManager? stop scan
10-03 17:17:45.621    3854-4052/? D/BtGatt.ScanManager? configureRegularScanParams() - queue=0
10-03 17:17:45.621    3854-3932/? D/bt_vendor? op for 7
10-03 17:17:45.621    3854-3932/? D/bt_upio? BT_WAKE is asserted already
10-03 17:17:45.621    3854-4052/? D/BtGatt.ScanManager? configureRegularScanParams() - ScanSetting Scan mode=-2147483648 mLastConfiguredScanSetting=2
10-03 17:17:45.621  17474-17474/com.icrealtime.allie D/BleRpcConnectionFactory? Connecting to device
10-03 17:17:45.621    3854-4052/? D/BtGatt.ScanManager? configureRegularScanParams() - queue emtpy, scan stopped
10-03 17:17:45.621    3854-3932/? D/bt_vendor? op for 7
10-03 17:17:45.621    3854-3932/? D/bt_upio? BT_WAKE is asserted already
10-03 17:17:45.631    1029-1029/? D/StatusBar.NetworkController? applyOpen
10-03 17:17:45.631  17474-17474/com.icrealtime.allie D/BluetoothGatt? connect() - device: 08:00:00:3F:B5:F1, auto: true
10-03 17:17:45.631  17474-17474/com.icrealtime.allie D/BluetoothGatt? registerApp()
10-03 17:17:45.631  17474-17474/com.icrealtime.allie D/BluetoothGatt? registerApp() - UUID=0b2a4a78-aaf0-4c95-832a-b94eb4513795
10-03 17:17:45.631    1029-1029/? D/StatusBar.NetworkController? refreshSignalCluster - setNWBoosterIndicators(false)
10-03 17:17:45.631    1029-1029/? D/StatusBar.NetworkController? applyOpen
10-03 17:17:45.631    3854-4178/? D/BtGatt.GattService? registerClient() - UUID=0b2a4a78-aaf0-4c95-832a-b94eb4513795
10-03 17:17:45.641    3854-3929/? D/BtGatt.GattService? onClientRegistered() - UUID=0b2a4a78-aaf0-4c95-832a-b94eb4513795, clientIf=7
10-03 17:17:45.641  17474-17488/com.icrealtime.allie D/BluetoothGatt? onClientRegistered() - status=0 clientIf=7
10-03 17:17:45.641    3854-4177/? D/BtGatt.GattService? clientConnect() - address=08:00:00:3F:B5:F1, isDirect=false set own addr = false own addr type:0
10-03 17:17:45.641    3854-3866/? D/BtGatt.GattService? clientConnect() - address=08:00:00:3F:B5:F1, isDirect=false set own addr = false own addr type:0
10-03 17:17:45.641    3854-3929/? D/BtGatt.btif? btif_get_device_type: Device [08:00:00:3f:b5:f1] type 3, addr. type 0
10-03 17:17:45.641    3854-3930/? E/bt-att? Unsupported transport for background connection
10-03 17:17:45.641    3854-3930/? E/bt-btif? bta_gattc_init_bk_conn failed
10-03 17:17:45.641    1029-1029/? D/StatusBar.NetworkController? refreshSignalCluster - setNWBoosterIndicators(false)
10-03 17:17:45.641    3854-3929/? D/BtGatt.btif? btif_get_device_type: Device [08:00:00:3f:b5:f1] type 3, addr. type 0
10-03 17:17:45.641    3854-3930/? E/bt-btif? bta_gattc_process_api_open Failed, unknown client_if: 0
10-03 17:17:45.641    3854-3929/? D/BtGatt.GattService? onConnected() - clientIf=7, connId=65535, address=08:00:00:3F:B5:F1
10-03 17:17:45.641    1029-1029/? D/StatusBar.NetworkController? applyOpen
10-03 17:17:45.641  17474-18298/com.icrealtime.allie D/BluetoothGatt? onClientConnectionState() - status=133 clientIf=7 device=08:00:00:3F:B5:F1
10-03 17:17:45.641  17474-18298/com.icrealtime.allie D/BleRpcConnectionFactory? onConnectionStateChange()
10-03 17:17:45.641    1029-1029/? D/StatusBar.NetworkController? refreshSignalCluster - setNWBoosterIndicators(false)
10-03 17:17:45.641    1029-1029/? D/StatusBar.NetworkController? applyOpen
10-03 17:17:45.651  17474-20038/com.icrealtime.allie D/BleRpcConnectionFactory? Connection state changed from 133 to 0 for 08:00:00:3F:B5:F1 (08:00:00:3F:B5:F1)
Run Code Online (Sandbox Code Playgroud)

怎么了?我确定我开始从主线程连接.

小智 0

这里有一点经验,如果BLE Central处于扫描状态,可能需要先停止扫描再连接外设。我也遇到了 133 错误,https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.1.1_r13/stack/include/gatt_api.h请在此处查看,GATT_ERROR

记录活动可以帮助调试,

./adb logcat :S bt-att: bt-btm:* BluetoothLEint:* BtGatt.ContextMap:*