我有一个房间有6个iBeacons,如果其中一个距离设备不到2.5米,则会发出一个动作,但这不能很好地工作,因为经常会有大的干扰,错误的行动。 我的问题是排序这些信标更好 - 使用rssi值或准确性?斯威夫特iBeacon使用准确度或rssi距离
下面我用于排序的代码/调用操作:
if beacons.count > 0 {
let sortedBeacons = beacons.sorted { (first, second) -> Bool in
if first.accuracy == -1 || second.accuracy == -1 {
return true
}
return first.accuracy < second.accuracy
}
let beacon = sortedBeacons[0]
if beacon.major.intValue == helperMajorValue && beacon.accuracy < 2.5 {
if beacon.accuracy != -1 {
if triggeredMajor == 0 {
counter += 1
} else if abs((helperMajorValue - triggeredMajor)) < 3 {
counter += 1
}
}
} else {
counter = 0
helperMajorValue = beacon.major.intValue
}
if counter > 4 {
counter = 0
print("majorValue: \(beacon.major.intValue) distance: \(beacon.accuracy)")
if beacon.accuracy < 2.5 {
startNavigation = true
majorValue = helperMajorValue
triggered = false
}
}
if majorValue == 171 {
//call action
} else if majorValue == 170 {
//call action
} else if majorValue == 172 {
//Call action
}}
非常感谢! 你能为这个问题推荐一个好的解决方案吗? 用例是用户通过设备穿过这个房间,并自动获取当前区域的不同屏幕。我怎样才能确保没有错误的行动触发? 信标距离彼此约5米。 – Thomas
同样,你必须适当地设定你的期望。这意味着意识到你**不能**确保不存在触发的错误操作。信标距离估计值是粗略估计值。有一件事可以帮助更好地进行距离的相对比较,即设定一个阈值。例如,您可能会认为两个信标距离相同,除非估计两个距离近一倍。 – davidgyoung