所以我在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(),所以当然我的应用程序将不再找到信标。
答案 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");
}
}
}