Ios 即使应用程序位于同一位置,信标的接近范围也会前后变化
信标接近范围将接近响应更改为“近-立即-远”,即使ios设备保持在同一位置 当接近响应接近时,我打开视图。我得到来回的接近反应,接近-立即,然后接近。它一次又一次地显示视图 我们怎样才能解决这个问题。是否有任何事件处理程序Ios 即使应用程序位于同一位置,信标的接近范围也会前后变化,ios,iphone,ios7,location,ibeacon,Ios,Iphone,Ios7,Location,Ibeacon,信标接近范围将接近响应更改为“近-立即-远”,即使ios设备保持在同一位置 当接近响应接近时,我打开视图。我得到来回的接近反应,接近-立即,然后接近。它一次又一次地显示视图 我们怎样才能解决这个问题。是否有任何事件处理程序 谢谢。接近度和准确度值似乎非常“嘈杂”。这也取决于您的环境。水(也就是人)吸收了蓝牙使用的频率,所以人们移动会产生影响,但我观察到,当两台设备都放在我的桌子上时,变化范围在1.2米到1.9米之间 我想你将不得不处理应用程序中的噪音。一旦视图打开,您应该将其保持打开状态,直到信
谢谢。接近度和准确度值似乎非常“嘈杂”。这也取决于您的环境。水(也就是人)吸收了蓝牙使用的频率,所以人们移动会产生影响,但我观察到,当两台设备都放在我的桌子上时,变化范围在1.2米到1.9米之间 我想你将不得不处理应用程序中的噪音。一旦视图打开,您应该将其保持打开状态,直到信标“远”(或您获得区域出口)一段时间。如果状态转换回接近或立即,则重置计时器 您需要使用以下类似的代码-
-(void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region {
CLBeacon *beacon=beacons[0];
switch (beacon.proximity) {
case CLProximityFar:
if (self.farTimer==nil) {
self.farTimer=[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(farTimerFired:) userInfo:beacon repeats:NO];
}
break;
case CLProximityNear:
case CLProximityImmediate:
if (self.farTimer!=nil) {
[self.farTimer invalidate];
self.farTimer=nil;
}
break;
case CLProximityUnknown:
NSLog(@"Beacon proximity is unknown");
break;
}
}
-(void) farTimerFired:(NSTimer *)timer {
CLBeacon *beacon=(CLBeacon *)timer.userInfo;
NSLog(@"Beacon %@ is really far",beacon.proximityUUID.UUIDString);
self.farTimer=nil;
}
接近度和精度值似乎相当“嘈杂”。这也取决于您的环境。水(也就是人)吸收了蓝牙使用的频率,所以人们移动会产生影响,但我观察到,当两台设备都放在我的桌子上时,变化范围在1.2米到1.9米之间 我想你将不得不处理应用程序中的噪音。一旦视图打开,您应该将其保持打开状态,直到信标“远”(或您获得区域出口)一段时间。如果状态转换回接近或立即,则重置计时器 您需要使用以下类似的代码-
-(void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region {
CLBeacon *beacon=beacons[0];
switch (beacon.proximity) {
case CLProximityFar:
if (self.farTimer==nil) {
self.farTimer=[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(farTimerFired:) userInfo:beacon repeats:NO];
}
break;
case CLProximityNear:
case CLProximityImmediate:
if (self.farTimer!=nil) {
[self.farTimer invalidate];
self.farTimer=nil;
}
break;
case CLProximityUnknown:
NSLog(@"Beacon proximity is unknown");
break;
}
}
-(void) farTimerFired:(NSTimer *)timer {
CLBeacon *beacon=(CLBeacon *)timer.userInfo;
NSLog(@"Beacon %@ is really far",beacon.proximityUUID.UUIDString);
self.farTimer=nil;
}
请理解邻近值只是一个值,因此这是由于@Paulw11在其回答中所说的噪声引起的预期行为 要使接近度(和准确度)读数尽可能可靠,可以做两件事:
除此之外,如@Paulw11所示,对邻近值进行软件筛选可能会有所帮助,但它仍然不是完美的。你只需要决定你是否能忍受你用例中的噪音 了解邻近值只是一个,因此这是由于@Paulw11在其回答中所说的噪声引起的预期行为 要使接近度(和准确度)读数尽可能可靠,可以做两件事:
除此之外,如@Paulw11所示,对邻近值进行软件筛选可能会有所帮助,但它仍然不是完美的。你只需要决定你是否能忍受你用例中的噪音 我看到的问题是,当我将信标和iOS设备并排放置时,虽然距离很近,但问题仍然存在。它会在几秒钟后将“接近”改为“接近”。这很好,因为“立即”比“接近”。一旦在“近”触发,您需要观察状态是否更改为“远”(或区域已退出)。当你得到一个“远”开始一个计时器-如果你仍然在“远”一段时间,那么你是'真的'远。如果返回到“接近”或“立即”,则重置进程如何启动“远”计时器?我尝试了很多方法,但即使计时器启动,也没有立即或接近地调用。如果你调用另一个带有performSegue的视图,并且有延迟,它就会工作。但是如果你想保持相同的观点?我该怎么办?@mad_mask查看我添加到答案中的示例代码非常感谢Paulw11。今天我会尝试一下。我看到的问题是,当我将信标和iOS设备并排放置时,虽然距离很近,但问题仍然存在。它会在几秒钟后将“接近”改为“接近”。这很好,因为“立即”比“接近”。一旦在“近”触发,您需要观察状态是否更改为“远”(或区域已退出)。当你得到一个“远”开始一个计时器-如果你仍然在“远”一段时间,那么你是'真的'远。如果返回到“接近”或“立即”,则重置进程如何启动“远”计时器?我尝试了很多方法,但即使计时器启动,也没有立即或接近地调用。如果你调用另一个带有performSegue的视图,并且有延迟,它就会工作。但是如果你想保持相同的观点?我该怎么办?@mad_mask看到样品了吗