解析 Altbeacon 库的 didEnterRegion 方法中的信标信息



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

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

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

我还想每 10 秒收到一次相同 iBeacon 的 didEnterRegion 方法, 但经过测试,似乎一旦看到该特定 iBeacon 一次, didEnterRegion 将不会再次收到后续调用.有什么方法可以清除iBeacon已被捕获,以便可以进行后续捕获?

我试图将电池使用率保持在尽可能低的水平,当使用来自onNonBeaconLESscan的scanRecord数据来解析信息时,我注意到即使将前景和后台时间"BetweenScanPeriod"设置为非常大的东西,也会显着消耗电池。我真的只需要看到iBeacon进入该区域并提取信息, 然后 10 秒后再次执行此操作.

预期申请流程-

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

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

相关内容

  • 没有找到相关文章

最新更新