【发布时间】:2023-03-03 20:59:01
【问题描述】:
我已经在 iOS 上开发区域监控大约 2 个月了。最近我们发现了一个故障,在一定半径内(约4.7KM或4700米)的所有区域同时触发。该设备的当前位置甚至不靠近任何区域。我不确定是什么触发了该事件。我通过 StackOverFlow、Apple 开发者论坛等进行了搜索,我没有发现任何与我所面临的问题类似的问题。
在我正在开发的应用程序中,我们正在监控城市(吉隆坡)内的 8 个区域。有一次,我的同事发现他的手机同时触发了 4 个区域通知。下面的地图显示了他的位置、所有被监控的区域、触发 4 个区域通知的潜在半径。
- 绿色标记是设备收到通知时的位置。
- 蓝色圆圈是设备的潜在半径(约 4700 米),覆盖了向设备发送通知的 4 个区域。
- 红色圆圈是每个区域的半径。
- 地图上还有 2 个其他区域从不发送通知(从不在蓝色圆圈下覆盖)
触发通知的屏幕截图:
这是我的位置管理器代码:-
CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.distanceFilter = kCLDistanceFilterNone;
这是我的 didEnterRegion 代码:-
-(void)locationManager:(CLLocationManager *)manager
didEnterRegion:(CLRegion *)region{
NSString* message = [NSString stringWithFormat:@"Message"];
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive)
{
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [NSDate date];
NSTimeZone* timezone = [NSTimeZone defaultTimeZone];
notification.timeZone = timezone;
notification.alertBody = message;
notification.alertAction = @"Show";
notification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
}
注意:此问题并非每次都会发生,它只会偶尔发生一次。 4700米是我分析了4个触发区域的位置后得出的半径。我不确定这是我的代码、iOS 上的故障还是我所在国家/地区的本地电信公司存在问题。在最新版本的应用程序中,我将 distanceFiter 调整为 10,我们现在正在对其进行测试,看看这是否能解决问题。
//locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.distanceFilter = 10;
didEnterRegion 方法从不返回用户的位置,我无法像上面显示的示例那样过滤掉半径较大的潜在错误位置。我能做些什么来解决这个故障?
任何面临类似问题的开发者,请站出来分享您解决此问题的经验和解决方案(如果有的话)。谢谢。
【问题讨论】:
-
您确定您的应用程序没有在后台被杀死,然后由 iOS (7) 稍后启动,因此导致对超过 1 个区域进行检查?
-
我很确定该应用程序没有被杀死。就算杀了,一个设备位置怎么可能同时出现在这么多不同的区域?该设备的当前位置甚至不靠近我上面提到的 4 个区域中的任何一个。距离设备位置最近的区域是 3000 米。
-
嗨,我也遇到了同样的问题,你能解决这个问题吗?你在哪个版本的设备上遇到了这个问题。请在这里查看我的问题。stackoverflow.com/questions/25841870/…跨度>
标签: ios objective-c ios7 core-location cllocationmanager