一、ClientIf Value超过32,导致Gatt通道无法建立(257)
ClientIf:
ClientIf Value简而言之是andorid系统中用于唯一表示某个Gatt链接的ID号,唯一标识,当我们的应用建立起一个Gatt通道,系统会查询当前可用的ClientIf Value,然后注册该ClientIf Value,代表该Gatt通道。当应用close gatt时,该ClientIf Value才会再次变为可用状态。系统ClientIf的最大值为32。
原因:
从上小节ClientIf的信息知道ClientIf的最大值为32,每次建立Gatt通道后,系统会为此注册一个ClientIf Value,所以当设备断链时没有将Gatt通道资源destory,所以系统认为当前ClientIf Value值是可用的,当设备重复断链链接时,ClientIf Value会一直增加,直到到最大限度32,导致Gatt之后再也无法建立。
BluetoothGattCallback.onConnectionStateChange中state返回257
解决办法: