我已经阅读了一些帖子,询问如何在应用程序在后台运行时获取信标的ID,而davidyoung建议可以使用测距API获取信标的ID。
为什么我们不能在region.getId1()
中调用didEnterRegion()
来获取该地区相关联的信标的第一个ID,因为有getId1()
,getId2()
和{{1}等方法在类Region中。
我尝试调用上面的方法,它们都返回getId3()
,我是否滥用这些方法?
答案 0 :(得分:1)
你可以这样做。但是,您必须了解Region
和Beacon
类之间的区别以及通配符在区域中的工作方式。
当您使用 监控 API时,您会注册一个信标Region
,该信标可以包含任何信标的三个标识符的通配符。当Region
中的标识符设置为null时,这意味着它是通配符,并且它将匹配它找到的任何信标而不管该标识符,只要{{1}中的其他非空标识符匹配信标。
只要首次遇到与注册区域匹配的一个或多个信标,监控API就会调用Region
。传递的didEnterRegion(Region region)
对象与启动监视时注册的对象相同。它将具有任何通配符标识符的空值。如果您在此对象的标识符中看到null,则可能是因为代码将监视设置为以通配符标识符开头。参考应用程序执行此操作,创建一个Region
,其中包含所有标识符的通配符,如下所示:
Region
上述代码将匹配任何信标,因为所有三个标识符都设置为通配符值null。但是,也可以像这样开始监控:
beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
上述代码仅匹配带有标识符2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1的信标,并且在进行回调时,您可以读取所有标识符。
如果要将通配符与读取信标标识符结合使用,则需要使用 范围 API。了解在使用通配符时,监视API无法告诉您导致进入该区域的确切信号,因为可能同时遇到许多匹配的信标。测距API通过提供所看到的每个信标的列表来解决这个问题。