gpt4 book ai didi

android - Estimote beacons - 监听器和测距监听器的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:20 25 4
gpt4 key购买 nike

我好像不太明白MonitoringListener和RangingListener的区别。

在我的特定用例中,我想不断了解范围内的所有信标,并想知道与它们中的任何一个关联的区域何时退出。

这是我正在谈论的内容的一个 fragment :

    beaconManager.setRangingListener(new BeaconManager.RangingListener() {
@Override
public void onBeaconsDiscovered(Region region, final List<Beacon> beacons) {

}
});
beaconManager.setMonitoringListener(new BeaconManager.MonitoringListener() {
@Override
public void onEnteredRegion(Region region, List<Beacon> beacons) {

}

@Override
public void onExitedRegion(Region region) {

}
});

我真的不明白 onBeaconsDiscovered 和 onEnteredRegion 方法之间的区别。当您开始监听它们中的任何一个时,您将一个区域作为参数传递,这让我有点困惑,因为乍一看我认为第一个只是不断搜索而另一个只是寻找特定区域。

谢谢!

最佳答案

真正的区别不在于回调本身,而在于它们被调用的方式和时间。

MonitoringListener.onEnteredRegionMonitoringListener.onExitedRegion 会在您越过传递给 BeaconManager.startMonitoring 的区域边界时触发。一旦您进入该区域并调用 onEnteredRegion,除非您退出并重新进入该区域,否则您将不会收到其他通知。

相反,RangingListener.onBeaconsDiscovered 会持续触发(默认情况下:每 1 秒一次)并为您提供 Android 设备发现的信标列表 - 只要它们与传递的区域相匹配到 BeaconManager.startRanging

示例:

假设您有一个 UUID = X、major = Y 和 minor = Z 的信标。您定义您的区域如下:

Region region = new Region("myRegion", X, Y, Z)

然后开始测距和监测:

beaconManager.startRanging(region);
beaconMangeer.startMonitoring(region);

回调调用的时间线可能如下所示:

# assuming you start outside the range of the beacon
1s: onBeaconsDiscovered(<myRegion>, <empty list of beacons>)
2s: onBeaconsDiscovered(<myRegion>, <empty list of beacons>)
3s: onBeaconsDiscovered(<myRegion>, <empty list of beacons>)
# now you move closer to the beacon, ending up in its range
4s: *onEnteredRegion*(<myRegion>, <a list with the "X/Y/Z" beacon>)
+ onBeaconsDiscovered(<myRegion>, <a list with the "X/Y/Z" beacon>)
5s: onBeaconsDiscovered(<myRegion>, <a list with the "X/Y/Z" beacon>)
6s: onBeaconsDiscovered(<myRegion>, <a list with the "X/Y/Z" beacon>)
7s: onBeaconsDiscovered(<myRegion>, <a list with the "X/Y/Z" beacon>)
# now you move out of the beacon's range again
8s: *onExitedRegion*(<myRegion>)
+ onBeaconsDiscovered(<myRegion>, <empty list of beacons>)
9s: onBeaconsDiscovered(<myRegion>, <empty list of beacons>)
10s: onBeaconsDiscovered(<myRegion>, <empty list of beacons>)

请注意,在现实中,蓝牙扫描的响应速度可能不如上面的示例。

关于android - Estimote beacons - 监听器和测距监听器的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com