在Altbeacon库的didEnterRegion方法中解析Beacon信息

Parsing Beacon Information in didEnterRegion Method of Altbeacon Library

我想在我的应用程序中使用与 RegionBootstrap 或 MonitorNotifier 关联的 didEnterRegion 方法。目前我正在使用 RegionBootstrap,但也许 MonitorNotifier 更适合我的应用程序。

特别是我将 iBeacon 解析器添加到 beaconmanager,然后设置区域的 "Id1" 以查找我的 iBeacon 的 UUID 部分并设置 "Id2" 和 "Id3"为空。尽管它们在该区域中设置为 Null,但我希望能够在输入 didEnterRegion 方法时解析来自这些位置的信息。我正在使用 "Id2"(主要)和 "Id3"(次要)来提供信标的随机识别参数。

此信息连同来自 UUID 的部分数据将在通知中发送给 phone 用户。测试时,我进入了 didEnterRegion 方法,但提供的数据只是与 "Id1" 的设置区域相匹配的数据。如果有人可以提供任何见解,将不胜感激!

我还想每 10 秒接收一次针对同一个 iBeacon 的 didEnterRegion 方法,但是通过测试发现一旦那个特定的 iBeacon 被看到一次,didEnterRegion 就不会再得到后续调用。有什么方法可以清除 iBeacon 已被捕获,以便进行后续捕获?

我试图尽可能地降低电池使用率,当使用来自 onNonBeaconLEScan 的 scanRecord 数据来解析信息时,我注意到即使在设置前景和背景时间时也会消耗大量电池 "BetweenScanPeriod" 到非常大的东西。我真的只需要看到 iBeacon 进入该区域并拉取信息,然后 10 秒后再次执行。

预期的应用流程 -

获取所需信息的最简单方法是在 didDetermineStateForRegion 回调中启用测距:

public void didDetermineStateForRegion(int state, Region region) {
    beaconManager.startRangingBeaconsInRegion(region);
    beaconManager.addRangeNotifier(this);
}

public void didRangeBeaconsInRegion(Region region, List<Beacon> beacons) {
  for (Beacon beacon : beacons) {
     Identifier id2 = beacon.getId2();
     Identifier id3 = beacon.getId3();
     // Now do something with id2 and id3
  }
}

didRangeBeaconsInRegion回调将在默认设置下每 1100 毫秒进行一次,但如果您希望在第一次访问 BeaconManager 时使用这样的一行,您可以将其更改为 10 秒:

beaconManager.setScanPeriod(10000l); 
beaconManager.setBetweenScanPeriod(0l); 

在电池方面,如果您想每 10 秒获取一次扫描更新,您将使用大量电池,因为这意味着几乎持续进行蓝牙扫描。在后台,您可能希望每 5 分钟执行一次 10 秒扫描:

beaconManager.setBackgroundScanPeriod(10000l); 
beaconManager.setBackgroundBetweenScanPeriod(290000l); 
BackgroundPowerSaver powerSaver = new BackgroundPowerSaver();