什么是Android M +可以拥有的最大并发Ble连接数

时间:2016-12-28 15:25:59

标签: bluetooth-lowenergy android-ble

我的应用程序需要同时连接9个Ble设备。 在这个article和任何其他资源中,它写的android 4.4+只能连接到7个设备。 M或N版本有什么新东西吗? 谢谢。

2 个答案:

答案 0 :(得分:5)

连接数受限于当前(仍然)设置为7的常量MAX_L2CAP_LINKS和GATT_MAX_PHY_CHANNEL。

如果您尝试使用autoConnect = true连接第8个设备,则由于Android M中引入的错误,堆栈将挂起并再次无法连接,直到您重新启动蓝牙。如果使用autoConnect = false连接第8个设备将立即使用newState = disconnected获取onConnectionStateChange回调,并且不会尝试连接。

我不知道为什么这些常数如此之低。硬件本身通常可以执行7次以上操作。例如,如果您自己编译AOSP并更改常量,Nexus 6P可以执行15次。

三星似乎注意到了这个问题,并增加了一些设备的常量。例如,三星Galaxy Tab A 10.1无需修改即可处理15个BLE连接。

答案 1 :(得分:0)

似乎这些常量是全局限制,而不是每个应用程序。我链接到Android中的BT堆栈的源。我想知道为什么这些常数就像它们一样......似乎是随机的。

#define GATT_MAX_PHY_CHANNEL 7

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/master/include/bt_target.h#1428

#define BTA_GATTC_CONN_MAX GATT_MAX_PHY_CHANNEL

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/master/bta/gatt/bta_gattc_int.h#89

tBTA_GATTC_CONN conn_track[BTA_GATTC_CONN_MAX];

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/master/bta/gatt/bta_gattc_int.h#424

注意

这是官方的Android代码。直到Android 7.2,供应商过去常常改变这种实现方式。 Android 8及更高版本中的理论是供应商不应该修改它(在现场没有足够的Android 8设备来看看它在实践中是如何工作的......至少在撰写此回复时)。