我想构建一个支持室内定位的应用程序(我知道蓝牙不是很精确,但粗略的数值一开始就足够了)。我的问题是,在关闭和打开蓝牙后,我只能将放置在房间中的信标定位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进行测距,但得到了相同的结果。
我希望能够不断地调整信标的范围,我是不是做错了什么?
提前感谢
发布于 2014-02-06 00:20:10
我不确定你是在前台还是后台进行测距。我相信如果你在后台做这件事,在locationManager停止之前,iOS只允许你做一段时间的测距。
另一件事是你只需要检查CLProximityNear。您可能想尝试检查三个区域。我测试了startRangingBeaconsInRegion,结果是在近距离和远距离之间来回跳跃,有时是立即跳跃。希望这能有所帮助。
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;
}发布于 2014-02-06 01:22:47
尝试删除此限定符:
if(beacon.proximity == CLProximityNear)
我怀疑您与信标的距离通常返回一个不同的值(可能是CLProximityFar或CLProximityImmediate)。如果为真,您将看到前10秒的结果的原因是因为在这段时间内,接近度值会有很大的波动。这可能会导致您在距离估计值确定之前,在这段时间内获得与CLProximityNear的匹配。
https://stackoverflow.com/questions/21581328
复制相似问题