如何在 Ionic 3 中获取最近的信标

How to get the closest beaon in Ionic 3

目前我正在使用 iBeacons 并且到目前为止已经设法扫描并在屏幕上显示它们。但后来我被告知要扫描并显示 ONLY 最近的一个(最近的一个),而忽略所有其他的。谁能给我一个大概的想法,如何在我拥有的一堆信标中获得最近的信标?

我认为在这种情况下我不能使用 Proximity 和 Accuracy,因为它们经常波动。

基本上我还没有想出如何使用逻辑:

onBeaconsDiscovered() {
    this.delegate.didRangeBeaconsInRegion().subscribe( data => {

      if (data.beacons !== null) {
        let nearestBeacon = // { code for detecting the nearest beacon }

        // then show up a notification / alert / toast ...
      }
    });

  }

请帮忙!我很欣赏每一个想法。

您可以在此处查看我关于如何使用本机 Swift 代码执行此操作的回答:Swift find closest Beacon by rssi

这里是 Swift 代码到 JavaScript 的直接翻译:

 var closestBeacon = null;
 for (var beacon in data.beacons) {
   if (beacon.rssi < 0 && closestBeacon != null && beacon.rssi > closestBeacon.rssi) {
     closestBeacon = beacon;
   }
 }

请记住,this.delegate.didRangeBeaconsInRegion().subscribe( data => { 回调每秒发生一次。所以如果你想根据最近的信标发出警报,你也需要注意不要每一秒都弹出新的警报。

如果你想跟踪你已经处理过的信标,你可以在回调之外的一些类似全局的范围内声明一个新对象:

  var triggeredBeacons = {};

那么在你对信标做任何处理之前,根据你的信标标识符构造一个字符串密钥,并确保它之前没有被触发:

  var beaconIdentifiers = beacon.uuid + " " + beacon.major + " " + beacon.minor;
  if (triggeredBeacons[beaconIdentifiers] == true) {
    // beacon has already triggered.  Ignore it
  }
  else {
    triggeredBeacons[beaconIdentifiers] = true;
    // Put your beacon processing here
  }