1

我使用 POJO 作为 BootStrapNotifier 而不是 Application 类。POJO 具有对上下文的引用。背景检测会以这种方式开始吗?当应用程序处于前台时,我也将此类用作 MonitorNotifier。是否必须在同一个类中使用 BootStrapNotifier 和 RangeNotifier,如参考应用程序中所示?这是一个正确的方法吗?如果应用程序被杀死,信标检测是否仅在连接或断开电源或重新启动时才开始?

4

1 回答 1

1

是的,可以使用 POJO 来接收来自 RegionBootsrap 的回调,但是您仍然必须使用onCreateAndroidApplication类的方法来构造和设置这个 POJO。

该类Application是必需的,因为它的onCreate方法是在 Android 应用程序启动时执行的第一个用户可执行代码。Android Beacon 库RegionBootstrap之所以有效,是因为该库设置了一个广播接收器来查找BOOT_COMPLETEDACTION_POWER_CONNECTEDACTION_POWER_DISCONNECTED事件。这个广播接收器并没有做太多的事情,但是如果当这些事件之一发生时应用程序没有运行,它会导致Application类的onCreate方法被执行。正是此时创建的 aRegionBootstrap导致信标扫描在后台开始,然后在找到感兴趣的信标时通知用户代码。

下面的代码显示了如何设置一个调用 POJO以接收来自 RegionBootstrap 的回调,并在's方法MyPojo中注册该 POJO 。的第一个参数是在检测到信标时将接收回调的类。ApplicationonCreateRegionBootstrap

您可以使用这样的 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) {
    ...
  }
}
于 2014-12-30T16:04:32.750 回答