在Altbeacon Library的didEnterRegion方法中解析信标信息

时间:2018-04-20 20:43:47

标签: altbeacon

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

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

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

我还希望每10秒钟为同一个iBeacon接收didEnterRegion方法,但经过测试后,看起来只要看到一次特定的iBeacon,didEnterRegion就不会再次进行后续调用。有什么方法可以清除iBeacon被捕获,以便后续捕获可能发生?

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

预期的申请流程 -

  • 用户输入匹配UUID(ID1)的信标区域
  • 解析来自ID2和ID3的信标信息,并通过通知
  • 将ID1与ID1一起发送给用户
  • 10秒后,用户收到另一个包含相同数据的通知
  • 重复直到人离开地区或iBeacon停止传输

1 个答案:

答案 0 :(得分:0)

获取所需信息的最简单方法是在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();