如何使用 Android 的 AltBeacon 库在运行时启动/禁用信标后台监控?

How can I start / disable background monitoring for beacons at runtime with AltBeacon Library for Android?

AltBeacon documentation 说我需要在 Application onCreate() 中初始化库以进行后台监控。

但我有在运行时初始化它所需的数据。

特别是在运行时(在远程 http 服务调用之后)我知道:

此外,如果某些条件发生变化(远程配置),我可能需要将其完全关闭。

当前版本的库 (2.5+) 处理此用例的正确方法是什么?

使用示例的 Android Beacon Library to detect beacons in the background, you construct a RegionBootstrap class in a custom Application class as described in the Starting an App in the Background 部分时。

此示例显示了在 onCreate 方法中设置初始 Region,但没有理由需要像示例中那样是静态的。欢迎您执行代码来调用服务以获取有关是否应启动信标扫描以及应在 Region 定义中使用哪些标识符的信息。如果你把它放在对网络服务调用的响应之后,你只需将这行代码移到那个回调中:

regionBootstrap = new RegionBootstrap(this, region);

为了与自定义 Application class 一起使用,第一个参数仍然需要是对 class 的引用。另请注意,此 class 有一个替代构造函数,它采用 Regions 的列表,以防您想要监视更多。

如果您想稍后更改监控的区域,那么最简单的方法是使用如下调用:

BeaconManager.getInstanceForApplication(context)
    .stopMonitoringBeaconsInRegion(oldRegion);
BeaconManager.getInstanceForApplication(context)
    .startMonitoringBeaconsInRegion(newRegion);

请注意,也可以在初始设置中使用上述技术。您可以在 Application onCreate 方法中构造一个虚拟区域来实例化 RegionBootstrap,然后在您从 Web 服务获得回调时使用上述方法调用来配置不同的区域。

请注意,停止监视某个区域时,您需要引用该区域。这不需要是同一个对象——对于停止监视唯一真正重要的是 Region class' 唯一标识符。这是一个 String 字段,用作识别 Region 的关键字。在下面的示例中,该唯一标识符是 "com.example.myapp.boostrapRegion".

Region region = new Region("com.example.myapp.boostrapRegion", null, null, null);