在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 秒后再次执行。
预期的应用流程 -
- 用户进入具有匹配 UUID (ID1) 的信标区域
- 来自ID2和ID3的Beacon信息被解析并与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();
我想在我的应用程序中使用与 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 秒后再次执行。
预期的应用流程 -
- 用户进入具有匹配 UUID (ID1) 的信标区域
- 来自ID2和ID3的Beacon信息被解析并与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();