【问题标题】:Estimote Eddystone stops scanning - javascriptEstimote Eddystone 停止扫描 - javascript
【发布时间】:2017-01-16 15:06:46
【问题描述】:

所以我在 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(),所以我的应用程序当然不会再找到信标了。

【问题讨论】:

    标签: estimote eddystone


    【解决方案1】:

    我猜问题是“每 500 毫秒调用一次函数 startScan”。像这样,您可以一次开始多次扫描。

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

    function onDeviceReady() {
        startScan();
    }
    

    注意:您应该在某处致电evothings.eddystone.stopScan

    【讨论】:

    • 谢谢,我会试试这个,如果它有效,我会把它标记为答案:)。
    【解决方案2】:

    是的,非常愚蠢的错误感谢@Dieattko,如果您想知道这是我想出的,它会起作用:

         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");
            }
          }
    }
    

    【讨论】: