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 调用 evoMon 2017 年 1 月 16 日 15:47:45 GMT+0100 (CET)
- 日志:Eddystone 扫描错误:"Scanning already in progress!" 1 月 16 日星期一
2017 15:47:45 格林威治标准时间+0100(欧洲中部时间)
- 日志:Eddystone 扫描错误:"Scanning already in progress!" 1 月 16 日星期一
2017 15:47:45 格林威治标准时间+0100(欧洲中部时间)
该应用程序刚刚停止调用 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");
}
}
}
所以我在 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 调用 evoMon 2017 年 1 月 16 日 15:47:45 GMT+0100 (CET)
- 日志:Eddystone 扫描错误:"Scanning already in progress!" 1 月 16 日星期一 2017 15:47:45 格林威治标准时间+0100(欧洲中部时间)
- 日志:Eddystone 扫描错误:"Scanning already in progress!" 1 月 16 日星期一 2017 15:47:45 格林威治标准时间+0100(欧洲中部时间)
该应用程序刚刚停止调用 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");
}
}
}