AltBeacon文档说我需要在应用程序onCreate()中初始化库用于后台监控。
但是我有在运行时初始化它所需的数据。
特别是在运行时(在远程http服务调用之后)我知道:
- IF信标跟踪应该完全启动
- 监控哪些区域
此外,如果某些条件发生变化(远程配置),我可能需要完全关闭它。
当前版本的库(2.5+)处理这个用例的正确方法是什么?
当使用Android Beacon Library在后台检测信标时,您可以在自定义应用程序类中构建RegionBootstrap
类,如示例的背景中启动应用程序部分所述。
本例显示了在onCreate
方法中设置初始Region
,但没有理由需要像示例中那样是静态的。欢迎您执行代码来调用服务,以获取有关是否应该启动信标扫描以及在Region
定义中应该使用哪些标识符的信息。如果将此代码放在对web服务调用的响应之后,则只需将这行代码移动到回调中:
regionBootstrap = new RegionBootstrap(this, region);
要使用自定义Application
类,第一个参数仍然需要是对该类的引用。还要注意的是,这个类有一个可选的构造函数,它接受Regions
的列表,以防您想要监视更多信息。
如果您想在以后更改监视的区域,那么最简单的方法是使用下面的调用:
BeaconManager.getInstanceForApplication(context)
.stopMonitoringBeaconsInRegion(oldRegion);
BeaconManager.getInstanceForApplication(context)
.startMonitoringBeaconsInRegion(newRegion);
注意,在初始设置中也可以使用上述技术。您可以在Application
onCreate
方法中构造一个虚拟区域来实例化RegionBootstrap
,然后当您从web服务获得回调时,使用如上的方法调用来配置不同的区域。
注意,当停止对一个区域的监视时,您需要一个对该区域的引用。这并不需要是相同的对象——停止监视的唯一真正重要的是Region
类的唯一标识符。这是一个String
字段,用作标识Region
的键。在下面的例子中,这个唯一标识符是"com.example.myapp.boostrapRegion"。
Region region = new Region("com.example.myapp.boostrapRegion", null, null, null);