我使用 POJO 作为 BootStrapNotifier 而不是 Application 类。POJO 具有对上下文的引用。背景检测会以这种方式开始吗?当应用程序处于前台时,我也将此类用作 MonitorNotifier。是否必须在同一个类中使用 BootStrapNotifier 和 RangeNotifier,如参考应用程序中所示?这是一个正确的方法吗?如果应用程序被杀死,信标检测是否仅在连接或断开电源或重新启动时才开始?
1 回答
是的,可以使用 POJO 来接收来自 RegionBootsrap 的回调,但是您仍然必须使用onCreate
AndroidApplication
类的方法来构造和设置这个 POJO。
该类Application
是必需的,因为它的onCreate
方法是在 Android 应用程序启动时执行的第一个用户可执行代码。Android Beacon 库RegionBootstrap
之所以有效,是因为该库设置了一个广播接收器来查找BOOT_COMPLETED
、ACTION_POWER_CONNECTED
和ACTION_POWER_DISCONNECTED
事件。这个广播接收器并没有做太多的事情,但是如果当这些事件之一发生时应用程序没有运行,它会导致Application
类的onCreate
方法被执行。正是此时创建的 aRegionBootstrap
导致信标扫描在后台开始,然后在找到感兴趣的信标时通知用户代码。
下面的代码显示了如何设置一个调用 POJO以接收来自 RegionBootstrap 的回调,并在's方法MyPojo
中注册该 POJO 。的第一个参数是在检测到信标时将接收回调的类。Application
onCreate
RegionBootstrap
您可以使用这样的 POJO 来设置测距或做任何其他您想做的事情——没有理由让这样的代码必须驻留在 AndroidApplication
类中。
public void onCreate() {
super.onCreate();
MyPojo myPojo = new MyPojo(this);
Region region = new Region("backgroundRegion",
null, null, null);
regionBootstrap = new RegionBootstrap(myPojo, region);
}
...
public class MyPojo implements BootstrapNotifier {
private Context mContext;
public MyPojo(Context context) {
mContext = context;
}
public Context getApplicationContext() {
return mContext;
}
public void didEnterRegion(Region region) {
...
}
public void didExitRegion(Region region) {
...
}
public void didDetermineStateForRegion(int state, Region region) {
...
}
}