Kontakt信标如何根据准确度检索信标

时间:2015-05-28 09:59:25

标签: ibeacon-android

我需要扫描信标何时接近,但我需要的是找到的信标是最近的而不是随机信标。 我尝试了两种方法:

public void onBeaconsUpdated(final Region region, final List<BeaconDevice> beacons) {
            for(int i=0; i<beacons.size();i++)
            {
                beacon = beacons.get(i);
                if(beacon.getProximity() != Proximity.UNKNOWN && beacon.getAccuracy() < 4)
                {
                    i = beacons.size() + 1;
                }
            }//THIS IS THE METHOD I USE TO GET THE NEAREST BEACON FROM THE LIST BUT IT DOESN'T WORK

                if(beacon.getMinor() == 1 && beacon.getMinor() != lastBeacon)
                {
                }
                if(beacon.getMinor() == 2 && beacon.getMinor() != lastBeacon)
                {
                }
                if(beacon.getMinor() == 3 && beacon.getMinor() != lastBeacon)
                {
                }
                if(beacon.getMinor() == 4 && beacon.getMinor() != lastBeacon)
                {
                }
                if(beacon.getMinor() == 5 && beacon.getMinor() != lastBeacon)
                {
                }
//and so on
    }

@Override
public void onBeaconAppeared(final Region region, final BeaconDevice beacon) {
}

对于第一种方法,列表不是根据准确性排序的, 在第二种方法中,信标的发现不是基于它们的准确性。 第一种方法是否可以对列表进行排序以获得最近的信标?

编辑:我还有另外一个问题,当我找到一个灯塔时,我想停止监控其他问题,但是调用beaconManager.stopMonitoring();不起作用,应用程序一直在搜索信标..这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

在BeaconManager的配置部分中,请设置BeaconDevice.DistanceSort,并设置ASC值。

 BeaconManager.setDistanceSort(DistanceSort.ASC);

然后,您可以通过指定:

轻松地从列表中检索Beacon实例
  ublic void onBeaconsUpdated(final Region region, final List<BeaconDevice> beacons) {
        final BeaconDevice beaconDevice = beacons.get(0); // the nearest beacon device.
}

我也看到你对lastBeacon次要价值和几个主要价值感兴趣。您也可以应用过滤器来处理仅接受具有lastBeacon次要值和几个主要值的信标的过滤器。您可以使用MinorFilter,MajorFilter和CustomFilter来完成。

如果附近有0个信标,则会调用public void onMonitorStop(),是否有办法阻止调用此方法并继续扫描?

onMonitorStart()onMonitorStop()都与MonitorPeriod紧密绑定。 MonitorPeriod.getActivePeriod()指定监控的持续时间,MonitorPeriod.getPassivePeriod()表示Android设备在以下两个活动时段之间处于非活动状态的时间。

我发现您对onBeaconsUpdated()方法感兴趣,因此您可以选择注册RangingListener,因为它提供了单一方法,您可以获得区域和设备列表。

Ranging使用的资源比监控少一点,如果你专注于远程设备而不是进入/放弃的区域,那么它更可取。