gpt4 book ai didi

java - 是否有停止使用 altbeacon 查找重复信标的功能?

转载 作者:行者123 更新时间:2023-11-30 10:01:55 26 4
gpt4 key购买 nike

我正在尝试发现我的设备与我在办公室为实习项目设置的信标之间的距离。我对 Android 工作室和 Java 还是很陌生。信标来自苹果(iBeacon)。但是我只设法找出其中一个信标,即使我打开了五个信标,结果也会重复。我下载了一个应用程序(Beacon Scanner)以确保其他信标已打开。我发现信标确实已打开但我只能设法找到一个信标并且结果重复。我如何停止结果重复并显示其余的信标?

下面是我从 davidgyoung 开发的 Altbeacon 库中得到的代码。

@Override
public void onBeaconServiceConnect() {

RangeNotifier rangeNotifier = new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Log.d(TAG, "didRangeBeaconsInRegion called with beacon count: "+beacons.size());
Beacon firstBeacon = beacons.iterator().next();
logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + String.format("%.2f", firstBeacon.getDistance()) + " meters away.");
}
}
};
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
beaconManager.addRangeNotifier(rangeNotifier);
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
beaconManager.addRangeNotifier(rangeNotifier);
} catch (RemoteException e) { }
}

private void logToDisplay(final String line) {
runOnUiThread(new Runnable() {
public void run() {
EditText editText = (EditText)RangingActivity.this.findViewById(R.id.rangingText);
editText.append(line+"\n");
}
});
}

这是我设备的结果。 /image/zJWs2.jpg

最佳答案

了解回调 didRangeBeaconsInRegion 每秒调用一次,并列出自上次调用以来检测到的所有信标。您显示的代码只查看第一个信标:

信标firstBeacon = beacons.iterator().next();

如果您想处理所有检测到的信标,请使用循环:

   for (Beacon beacon : beacons) {
logToDisplay("The beacon " + beacon.toString() + " is about " + String.format("%.2f", beacon.getDistance()) + " meters away.");
}

如果你不想每秒重做一次处理,那么你可以像这样添加一个标志:

 boolean alreadyProcessed = false;
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (!alreadyProcessed) {
alreadyProcessed = true;
for (Beacon beacon : beacons) {
logToDisplay("The beacon " + beacon.toString() + " is about " + String.format("%.2f", beacon.getDistance()) + " meters away.");
}
}
}

以上是一个简单的解决方案,可以告诉您一秒钟内看到的所有信标。但请记住,所有信标可能不会在不频繁发布广告的每一秒都被检测到。您将需要一个更复杂的解决方案来生成在较长时间内看到的所有唯一信标的列表。

关于java - 是否有停止使用 altbeacon 查找重复信标的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212738/

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