Estimote Eddystone停止扫描 - javascript

时间:2017-01-16 15:06:46

标签: estimote eddystone

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

每隔500毫秒调用函数startScan:

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

startScan功能:

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名为evoMon 2017年1月16日15:47:45 GMT + 0100(CET)
  • 日志:Eddystone扫描错误:“扫描已在进行中!” 1月16日星期一 2017 15:47:45 GMT + 0100(CET)
  • 日志:Eddystone扫描错误:“扫描已在进行中!” 1月16日星期一 2017 15:47:45 GMT + 0100(CET)

该应用程序只是停止调用startScan(),所以当然我的应用程序将不再找到信标。

2 个答案:

答案 0 :(得分:0)

我猜问题是"每500毫秒调用一次函数startScan"。像这样你可以立刻开始多次扫描。

你应该只打电话一次。你的startScan函数调用evothings.eddystone.startScan,启动并继续扫描直到停止。因此,您只需拨打evothings.eddystone.startScan一次,每次检测到信标时都会调用您的successCallback。

function onDeviceReady() {
    startScan();
}

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

答案 1 :(得分:0)

非常非常难以理解的错误感谢@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");
        }
      }
}