如何在 Ionic 3 中获取最近的信标
How to get the closest beaon in Ionic 3
目前我正在使用 iBeacons 并且到目前为止已经设法扫描并在屏幕上显示它们。但后来我被告知要扫描并显示 ONLY 最近的一个(最近的一个),而忽略所有其他的。谁能给我一个大概的想法,如何在我拥有的一堆信标中获得最近的信标?
我认为在这种情况下我不能使用 Proximity 和 Accuracy,因为它们经常波动。
基本上我还没有想出如何使用逻辑:
onBeaconsDiscovered() {
this.delegate.didRangeBeaconsInRegion().subscribe( data => {
if (data.beacons !== null) {
let nearestBeacon = // { code for detecting the nearest beacon }
// then show up a notification / alert / toast ...
}
});
}
请帮忙!我很欣赏每一个想法。
您可以在此处查看我关于如何使用本机 Swift 代码执行此操作的回答:Swift find closest Beacon by rssi
这里是 Swift 代码到 JavaScript 的直接翻译:
var closestBeacon = null;
for (var beacon in data.beacons) {
if (beacon.rssi < 0 && closestBeacon != null && beacon.rssi > closestBeacon.rssi) {
closestBeacon = beacon;
}
}
请记住,this.delegate.didRangeBeaconsInRegion().subscribe( data => {
回调每秒发生一次。所以如果你想根据最近的信标发出警报,你也需要注意不要每一秒都弹出新的警报。
如果你想跟踪你已经处理过的信标,你可以在回调之外的一些类似全局的范围内声明一个新对象:
var triggeredBeacons = {};
那么在你对信标做任何处理之前,根据你的信标标识符构造一个字符串密钥,并确保它之前没有被触发:
var beaconIdentifiers = beacon.uuid + " " + beacon.major + " " + beacon.minor;
if (triggeredBeacons[beaconIdentifiers] == true) {
// beacon has already triggered. Ignore it
}
else {
triggeredBeacons[beaconIdentifiers] = true;
// Put your beacon processing here
}
目前我正在使用 iBeacons 并且到目前为止已经设法扫描并在屏幕上显示它们。但后来我被告知要扫描并显示 ONLY 最近的一个(最近的一个),而忽略所有其他的。谁能给我一个大概的想法,如何在我拥有的一堆信标中获得最近的信标?
我认为在这种情况下我不能使用 Proximity 和 Accuracy,因为它们经常波动。
基本上我还没有想出如何使用逻辑:
onBeaconsDiscovered() {
this.delegate.didRangeBeaconsInRegion().subscribe( data => {
if (data.beacons !== null) {
let nearestBeacon = // { code for detecting the nearest beacon }
// then show up a notification / alert / toast ...
}
});
}
请帮忙!我很欣赏每一个想法。
您可以在此处查看我关于如何使用本机 Swift 代码执行此操作的回答:Swift find closest Beacon by rssi
这里是 Swift 代码到 JavaScript 的直接翻译:
var closestBeacon = null;
for (var beacon in data.beacons) {
if (beacon.rssi < 0 && closestBeacon != null && beacon.rssi > closestBeacon.rssi) {
closestBeacon = beacon;
}
}
请记住,this.delegate.didRangeBeaconsInRegion().subscribe( data => {
回调每秒发生一次。所以如果你想根据最近的信标发出警报,你也需要注意不要每一秒都弹出新的警报。
如果你想跟踪你已经处理过的信标,你可以在回调之外的一些类似全局的范围内声明一个新对象:
var triggeredBeacons = {};
那么在你对信标做任何处理之前,根据你的信标标识符构造一个字符串密钥,并确保它之前没有被触发:
var beaconIdentifiers = beacon.uuid + " " + beacon.major + " " + beacon.minor;
if (triggeredBeacons[beaconIdentifiers] == true) {
// beacon has already triggered. Ignore it
}
else {
triggeredBeacons[beaconIdentifiers] = true;
// Put your beacon processing here
}