我想在我的应用程序中使用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秒后再次进行。
预期的申请流程 -
答案 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();