我正在制作一款使用BLE Beacons的应用程序。我们正在使用Estimote信标及其框架。我跟着this tutorial在我的应用程序中添加检测。
检测成功,我可以使用以下代码获取信标列表:
this.beaconManager = new BeaconManager(this);
this.beaconManager.setRangingListener(new BeaconManager.BeaconRangingListener() {
@Override
public void onBeaconsDiscovered(BeaconRegion beaconRegion, List<Beacon> list) {
if (!list.isEmpty()) {
MainActivity.this.updateClosestBeacon(list);
}
else {
txtClosest.setText("No beacons detected");
}
}
});
this.beaconRegion = new BeaconRegion("monitored region",
UUID.fromString("B9407F30-F5F8-466E-AFF9-25556B57FE6D"),
null, null);
beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
@Override
public void onServiceReady() {
beaconManager.startRanging(beaconRegion);
}
});
updateClosestBeacon函数使用以下两个函数获取信标:
private static Comparator<Beacon> COMPARATOR = new Comparator<Beacon>()
{
// This is where the sorting happens.
public int compare(Beacon o1, Beacon o2)
{
return o2.getRssi() - o1.getRssi();
}
};
public Beacon getClosestBeacon(List<Beacon> list){
if(list.isEmpty())
return null;
Collections.sort(list, COMPARATOR);
return list.get(0);
}
我按rssi订购信标列表然后获取第一个。这不能正常工作。我查看了estimote论坛的答案,在那里我找不到它,只是链接到显示信标检测的视频。
您是否有一些代码可以帮助我处理信标列表并获得最接近的信号?
感谢您的帮助