android M+ 可以拥有的最大并发 Ble 连接数是多少

问题描述 投票:0回答:2

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

android bluetooth-lowenergy android-ble
2个回答
12
投票

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

如果您尝试使用 autoConnect = true 连接第 8 个设备,堆栈将挂起并无法再次连接,直到您重新启动蓝牙为止,因为 Android M 中引入了一个错误。如果您使用 autoConnect = false 连接第 8 个设备,您将立即获得一个 onConnectionStateChange 回调,newState =已断开连接,并且不会尝试连接。

我不知道为什么这些常数这么低。通常硬件本身可以做超过 7 个。例如,如果您自己编译 AOSP 并更改常量,Nexus 6P 可以做 15 个。

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


5
投票

这些常量似乎是全局限制,而不是每个应用程序。我正在链接到 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 设备来了解其在实践中的工作原理......至少在撰写此回复时是这样)。

© www.soinside.com 2019 - 2024. All rights reserved.