我想构建一个具有室内本地化的应用程序(我知道蓝牙不是那么精确,但粗略的值一开始就够了)。 我的问题是,我只能在关闭和打开蓝牙后将放置在房间内的信标放置10秒钟。奇怪的是,关闭和打开蓝牙可以解决问题(再次持续10秒)。
以下是我的简单测试应用的代码段:
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
BOOL beaconFound = NO;
for(CLBeacon *beacon in beacons)
{
if(beacon.proximity == CLProximityNear)
{
_textView.text = @"A Beacon is Near!";
beaconFound = YES;
}
}
if(!beaconFound)
_textView.text = @"No Beacon is Near";
}
iOS上有节能吗?我对此没有任何其他解释,但似乎没有其他人有这个问题。 我也试过在iPad上测试一个模拟的iBeacon但得到了相同的结果。
我希望能够不断地对信标进行测距,我做错了吗?
提前致谢
答案 0 :(得分:0)
我不确定你是在前台还是后台进行测距。 我相信如果你在后台运行iOS,它只允许你在locationManager停止之前进行一段时间的测距。
另一件事是你只检查CLProximityNear。您可能想尝试检查三个区域。我测试了startRangingBeaconsInRegion并且结果在Near和Far之间来回跳跃,有时候立即。希望这有帮助。
switch (beacon.proximity) {
case CLProximityImmediate:
_textView.text = @"A Beacon is Immediate!";
beaconFound = YES;
break;
case CLProximityNear:
_textView.text = @"A Beacon is Near!";
beaconFound = YES;
break;
case CLProximityFar:
_textView.text = @"A Beacon is Far!";
beaconFound = YES;
break;
default:
break;
}
答案 1 :(得分:0)
尝试删除此限定符:
if(beacon.proximity == CLProximityNear)
我怀疑您与信标的距离通常会返回不同的值(可能是CLProximityFar或CLProximityImmediate)。如果为true,那么您在前10秒内看到结果的原因是因为在此期间接近值会大幅反弹。这可能会导致您在距离估计结束之前的那段时间内与CLProximityNear匹配。