【问题标题】:What is the maximum number of bonded i.e. 'Paired Devices' for Bluetooth LE devices in Android?Android 中蓝牙 LE 设备的绑定(即“配对设备”)的最大数量是多少?
【发布时间】:2019-04-02 16:52:01
【问题描述】:

我认为这个问题所寻求的信息与此处寻求的信息相似(但不相同)......

How many devices we can pair via Bluetooth of BLE to Android?

...所以让我们以不同的方式重新问它:

假设我们有一个用例,其中有手机的人可能希望使用配对安全地连接(使用行业标准安全机制)到蓝牙 LE 设备。发生配对时,绑定信息存储在手机-->设置-->无线-->蓝牙-->已配对设备窗口(对话框)中。

无论是否保持活动连接,这些“配对设备”都将保留在此列表中,对吗?

如果这个答案是正确的,那么在 Android 操作系统(或 iPhone 的 iOS)开始出现性能问题之前,这个列表中可以累积多少成百上千台之前已配对/绑定的设备?

我的理解是……Android 操作系统或 iPhone 操作系统都没有提供“清除”旧配对/绑定设备列表的编程能力。如果手机用户允许配对/绑定设备列表失控,则忽略手动移除这些设备的手机用户可能会面临一项具有挑战性的任务。

想法?非常感谢,--DJ Regan


2018 年 11 月 12 日更新...今天的新消息:在使用 Android 分析许多 BLE 配对设备时 - - > 我的一个队友发现他们的蓝牙无线电在尝试配对后变得不可用(如无法使用)到今天第 102 台设备+。额外的分析正在进行中。所以......也许这是一个iOS或Android都不应该被信任支持的用例? --DJ里根

【问题讨论】:

  • 我怀疑该列表是否会增长到足以导致性能问题的程度。
  • 您好 Paulw11,您可能是对的。 :) 但是,如果人们要推出以每年数十万台新设备的速度增长的解决方案……他们需要对稳定的性能“毫无疑问”充满信心。是否有人已经有一个示例用例,其中“毫无疑问”地确定了这种信心?我意识到这是一个“昂贵”的分析用例。
  • 您将要求用户每年将他们的设备与 100,000 台不同的设备进行个人绑定。每天273,每天?我怀疑你有比配对设备表更大的问题。将对蓝牙设置屏幕的可用性产生负面影响。这可能在大约 100 台设备上达到
  • 这是一个实际的真实用例...假设创建了一个手机应用程序,它使授权用户(在本例中为公用事业服务人员)能够读取客户的公用事业计量表。在这种情况下... 使用手机的用户会挨家挨户地与启用 BLE 的传感器安全配对。这种安全配对工作将导致“配对设备”中的绑定信息无限增长。谁有此用例的经验?
  • 我认为没有人会对这个用例有经验,因为我认为在这种情况下配对/绑定是不切实际的;抄表员要输入什么 PIN 码?如果每个仪表都有一个“众所周知的”PIN,那么配对是没有意义的。如果读取器需要从仪表本身获取 PIN,那么读取过程将非常缓慢,而且可能毫无意义。公用事业仪表读数是一个大秘密吗?

标签: android ios bluetooth


【解决方案1】:

根据来源,我猜 100 是正确的数字,指向您可以绑定的最大设备。在实践中也得到了证明。

 /* The number of security records for peer devices. */
    #ifndef BTM_SEC_MAX_DEVICE_RECORDS
    #define BTM_SEC_MAX_DEVICE_RECORDS  100
    #endif

...

/************************************************************************************
    **  Local type definitions
    ************************************************************************************/
    typedef struct
    {
        uint32_t num_devices;
        bt_bdaddr_t devices[BTM_SEC_MAX_DEVICE_RECORDS];
    } btif_bonded_devices_t;

【讨论】:

    【解决方案2】:

    根据蓝牙实现,如果设备记录超过100条,分配将失败。

    责任BTM_SEC_MAX_DEVICE_RECORDS定义为in bt_target.h

    /* The number of security records for peer devices. */
    #ifndef BTM_SEC_MAX_DEVICE_RECORDS
    #define BTM_SEC_MAX_DEVICE_RECORDS  100
    #endif
    

    然后使用 inside btm_dev.c,特别是在 BTM_SecAddDevice 中,它在 100 次配对后返回 false:

       /* There is no device record, allocate one.
        * If we can not find an empty spot for this one, let it fail. */
        for (i = 0; i < BTM_SEC_MAX_DEVICE_RECORDS; i++)
    

    【讨论】:

    • 我们可以更改BTM_SEC_MAX_DEVICE_RECORDS变量的值并更新Android手机上的新BT堆栈
    【解决方案3】:

    您最多可以通过蓝牙连接 8 台设备。

    【讨论】:

    • 连接和配对的设备是两个不同的东西
    • 但为什么只有 8 个?
    • Tushar 是正确的 - 连接和配对是两个不同的东西。问题是“有多大?”是否允许获取绑定(配对)设备的列表?根据我们在几部手机上运行的一些模拟测试,Mihail 的 100 答案听起来是正确的。我听说有更新的版本可以超过 100 - 但是......对于这些设备,新的上限是多少?走着瞧。或者也许有人知道?
    • 如果我们再参考源码,可以看到#define GAP_MAX_CONNECTIONS 8,最大同时GAP L2CAP连接数
    猜你喜欢
    • 1970-01-01
    • 2021-01-29
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2022-01-04
    • 2012-05-07
    相关资源
    最近更新 更多