ios iBeacon监控具有相同UUID和不同主要、次要

vbopmzt1  于 2023-02-14  发布在  iOS
关注(0)|答案(2)|浏览(186)

我有多个iBeacons具有相同的UUID,但主编号和次编号不同。主编号和次编号可以是不同的组合,但UUID保持不变。例如,

  • 设备#1-UUID xyz,主要1,次要1
  • 设备#2-UUID xyz,主要1,次要2
  • 设备#3-UUID xyz,主要2,次要1
  • .....
  • 设备#n-UUID xyz,主要设备10,次要设备1

此外,这些iBeacons位于1 - 50英尺范围内的近距离。因此,它们的区域可以彼此相交。
在我的iOS应用程序中,我想检测区域中所有具有相同UUID的iBeacons,然后迭代它们并读取每个iBeacons的主和次,以检测检测到其中的哪一个。
我可以使用init(proximityUUID: UUID, identifier: String)和我的UUID,然后遍历它们吗?

omjgkv6w

omjgkv6w1#

有两种不同的iOS CoreLocation API,您需要使用第一种API来实现此目的:

1.信标测距(您想要的)

调用locationManager.startRangingBeacons(in: region)时使用的区域定义将major和minor保留为nil,所显示的构造函数init(proximityUUID: UUID, identifier: String)正是这样做的。
这将给予你一个回调locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion)的命令,每秒一次,其中包含一个与你的区域定义匹配的所有CLBeacon对象的数组,你可以遍历这个数组来查看所有的对象。

2.信标监视(您不需要的内容)

调用locationManager.startMonitoring(region: region)时,区域定义中保留major和minor nil。
每当至少 * 一个 * 信标匹配区域定义出现,或者 * 所有 * 信标匹配区域消失时,这将为您提供locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion)或等效didExitRegion方法的回调。
这将不允许您迭代所有匹配的信标,因为回调只包括区域定义,而不包括匹配信标的列表。

2izufjch

2izufjch2#

是的,你绝对可以!当检测到另一个iBeacon时,你不会收到新的委托通知,除非你创建了多个具有不同ID的监听器,但是一旦你在给定UUID的区域中,你就可以迭代范围内的所有信标,并获得它们的主信标和次信标

相关问题