2

我无法理解在 ibeaconSevice 库中使用 didDetermineStateForRegion(int state, Region region) 。

我有一个在后台模式下运行的服务,当我第一次看到一个信标时, didEnterRegion(Region region) 和 didDetermineStateForRegion(int state, Region region) 都被调用了。然后停止扫描。在下一次扫描中,即使我仍在同一区域,也不会执行回调。请问,你能帮忙吗?

iBeaconManager.setBackgroundMode(this, true);
iBeaconManager.setBackgroundMode(this, true);    
     iBeaconManager.setMonitorNotifier(new MonitorNotifier() {
      @Override
      public void didEnterRegion(Region region) {
      Log.d(ConstantsDecoder.LOGTAG, "I just saw an iBeacon for the first time!"); 
}


@Override
public void didDetermineStateForRegion(int state, Region region) {
                Log.d(ConstantsDecoder.LOGTAG, "I have just switched from   seeing/not seeing iBeacons: "+state); 

            }
4

1 回答 1

2

每次状态更改时,这些方法只会被调用一次。所以它是这样工作的:

  1. iBeacon 对设备可见。

  2. didEnterRegiondidDetermineStateForRegion被叫到。

  3. 当 iBeacon 对设备可见时,不再调用上述方法。

  4. iBeacon 不再对设备可见。

  5. didExitRegiondidDetermineStateForRegion被叫到。

  6. 当 iBeacon 对设备不可见时,不再调用上述方法。

  7. 转到步骤 1。

如果您想每秒接到一个电话,其中列出了所有正在看到的 iBeacon,请使用此处的测距示例代码。

于 2014-03-27T14:34:02.780 回答