【问题标题】:What is the max concurrent Ble connections android M+ can haveandroid M+ 的最大并发 Ble 连接数是多少
【发布时间】:2016-12-28 15:25:58
【问题描述】:

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

【问题讨论】:

    标签: bluetooth-lowenergy android-ble


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 那么,如果在没有 autoConnect = true 的情况下管理我自己的已连接设备列表,我可以连接到更多设备吗?
    • 没有。如果您使用 autoConnect = false 连接第 8 台设备,您将立即获得一个 onConnectionStateChange 回调,其中 newState = disconnected 并且不会尝试连接。
    • 没有文档,只有源代码。你可以自己试试。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2012-11-30
      相关资源
      最近更新 更多