我有多个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,然后遍历它们吗?
2条答案
按热度按时间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方法的回调。这将不允许您迭代所有匹配的信标,因为回调只包括区域定义,而不包括匹配信标的列表。
2izufjch2#
是的,你绝对可以!当检测到另一个iBeacon时,你不会收到新的委托通知,除非你创建了多个具有不同ID的监听器,但是一旦你在给定UUID的区域中,你就可以迭代范围内的所有信标,并获得它们的主信标和次信标