当应用程序在后台运行时,为什么不能在didEnterRegion()中调用region.getId1()来获取beacon的第一个ID?

时间:2015-03-16 07:24:08

标签: android ibeacon-android

我已经阅读了一些帖子,询问如何在应用程序在后台运行时获取信标的ID,而davidyoung建议可以使用测距API获取信标的ID。

为什么我们不能在region.getId1()中调用didEnterRegion()来获取该地区相关联的信标的第一个ID,因为有getId1()getId2()和{{1}等方法在类Region中。

我尝试调用上面的方法,它们都返回getId3(),我是否滥用这些方法?

1 个答案:

答案 0 :(得分:1)

你可以这样做。但是,您必须了解RegionBeacon类之间的区别以及通配符在区域中的工作方式。

当您使用 监控 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通过提供所看到的每个信标的列表来解决这个问题。