Estimote Eddystone 停止扫描 - javascript

Estimote Eddystone stops scanning - javascript

所以我在 eddystone 扫描上使用了一个 Evothings 示例,但出于某种原因,一段时间后该应用程序将不再扫描。

每 500 毫秒调用一次函数 startScan:

function onDeviceReady() {
    // Start tracking beacons!
     setInterval(function(){ startScan() }, 500);
}

开始扫描功能:

function startScan() {
    // console.log("Startscan called"+new Date());
    // Called continuously when ranging beacons.
    evothings.eddystone.startScan(
        function(beacon)
        {
                console.log("Startscan called evo"+new Date());
                // Insert/update beacon table entry.
                beacon.timeStamp = Date.now();
                beacons[beacon.address] = beacon;
                domodalandstuff(); // this function opens a bootstrap modal to show some data
        },
        function(error)
        {
                console.log('Eddystone Scan error: ' + JSON.stringify(error)+" "+new Date());
        }
)};

大约 10 分钟后,我在我的控制台中看到了这个:

该应用程序刚刚停止调用 startScan(),因此我的应用程序当然不会再找到信标。

我猜问题是"Calling function startScan every 500 ms"。像这样,您可以同时开始多次扫描。

你应该只调用一次。您的 startScan 函数调用 evothings.eddystone.startScan, 启动 并继续扫描直到停止。所以你应该只调用 evothings.eddystone.startScan 一次,它会在每次检测到信标时调用你的 successCallback。

function onDeviceReady() {
    startScan();
}

注意:你应该在某处调用evothings.eddystone.stopScan

年非常愚蠢的错误感谢@Dietatko,如果你想知道这是我想出的,它有效:

     function checkmodalup() {
      if ($('#myModal').is(':visible')){
         evothings.eddystone.stopScan();
         isscanning = false;
      }
      else {
        if (isscanning === false) {
         evothings.eddystone.stopScan();
         startScan();
            isscanning = true;
        }
        else if (isscanning === true) {
            console.log("is already scanning");
        }
      }
}