iBeacon 监控具有相同 UUID 和不同主要、次要的多个信标

iBeacon monitoring multiple beacons with same UUID and different major, minor

我有多个具有相同 UUID 但主要和次要编号不同的 iBeacon。它可以是 major 和 minor 的不同组合,但 UUID 保持不变。比如说,

此外,这些 iBeacon 的位置非常接近,范围为 1 - 50 英尺。因此,它们的区域可以相互交叉。

在我的 iOS 应用程序中,我想检测区域内所有具有相同 UUID 的 iBeacon,然后遍历它们并读取每个 iBeacon 的主要和次要以检测检测到其中一个。

我可以使用吗 init(proximityUUID: UUID, identifier: String) 使用我的 UUID 然后遍历它们?

是的,你绝对可以!当检测到另一个 iBeacon 时,您不会收到新的委托通知,除非您创建多个具有不同 ID 的侦听器,但是一旦您位于给定 UUID 的区域中,您就可以遍历范围内的所有信标并获取它们的 major 和 minor

有两种不同的 iOS CoreLocation API,为此您需要使用第一种:

1.信标测距(你想要什么)

您调用 locationManager.startRangingBeacons(in: region) 的区域定义将 major 和 minor 设为零。您显示的构造函数 init(proximityUUID: UUID, identifier: String) 正是这样做的。

这将使您每秒回调一次 locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion),其中包含与您的区域定义匹配的所有 CLBeacon 对象的数组。您可以遍历此数组以查看所有这些。

2。信标监控(你不要的)

您调用 locationManager.startMonitoring(region: region) 时使用的区域定义将 major 和 minor 设为 nil。

每次出现至少一个个匹配区域定义的信标,或者所有匹配该区域的信标消失。

这不会让您遍历所有匹配的信标,因为回调仅包括区域定义而不是匹配的信标列表。