如何检测具有相同标识符的多个信标?

How to detect multiple beacons with same identifiers?

我正在寻找一种方法来检测给定区域内具有相同或不同标识符(UUID、Major 和 Minor)的所有信标。目前,我可以检测到 "randomly" 个具有相同标识符的信标,而不是所有信标。

这是手头的情况:
我有3个信标,分别是:

  1. B1(UUID: 1, Major: 1, Minor: 1) - 距离:1 米
  2. B2(UUID: 1, Major: 1, Minor: 1) - 距离:5 米
  3. B3(UUID: 1, Major: 1, Minor: 2) - 距离:6 米

信标都放在同一个区域,当给定 3 个唯一标识符时,例如 B2 与 B1 和 B3 的次要不同,我可以验证是否检测到所有 3 个信标。这意味着手头的信标没有问题,我正在扫描的区域也没有问题。

问题是,因为 B1 和 B2 具有相同的标识符,所以在 RangeNotifier.didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) 实现中我只收到一个包含以下任一个的集合:B1 和 B3 或 B2 和 B3。

当使用应用程序 RadBeacon 配置信标时,实际上我可以看到所有信标,即使它们具有相同的标识符。有人可以解释为什么会这样以及如何解决这个问题吗?

设置:
设备:Android 5.1 LG G4(这也适用于三星 Galaxy S6 edge)
库:AltBeacon 2.5.1

默认情况下,Android Beacon Library 会将发送相同信标标识符的发射机的所有广告视为单个信标。从库版本 2.3 开始,您可以配置此行为,以便将每个不同的发射器(由蓝牙 MAC 地址标识)视为不同的信标。这样做很简单:

Beacon.setHardwareEqualityEnforced(true);

默认行为和此配置对于不同的用例都有其优势。值得注意的是,在 iOS 设备上,CoreLocation 通过蓝牙标识符跟踪信标,因此设置上述配置更接近地跟踪 iOS 的行为方式。该库可能会在未来的 3.0 版本中将其作为默认设置。