我目前正在处理位置管理器的区域功能。不幸的是,我无法收到任何小于1亿的过境点的通知。我创建了半径为20m/50m或70m的区域,我总是只有在越过100米边界时才会收到通知。但我希望有一个更细的半径,例如20米,并收到通知。如果我的射程大于100米,一切都很好。150米。在这种情况下,我一进入150米就收到通知,正如我所期望的那样
我试着玩"kCLLocationAccuracy"——LocationManager上的设置和CLRegions的创建,但两者都没有似乎有任何效果。
这是我使用的代码:
- (void) initializeLocationManager
{
// Check to ensure location services are enabled
if(![CLLocationManager locationServicesEnabled]) {
[self showAlertWithMessage:@"You need to enable location services to use this app."];
return;
}
if(![CLLocationManager regionMonitoringAvailable]) {
[self showAlertWithMessage:@"This app requires region monitoring features which are unavailable on this device."];
return;
}
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
}
- (void) setupGeoFence:(Station*)station
{
CLLocationCoordinate2D centerCoordinate = CLLocationCoordinate2DMake([station.gpsPosition.latitude doubleValue], [station.gpsPosition.longitude doubleValue]);
CLRegion *geofence = [[CLRegion alloc] initCircularRegionWithCenter:centerCoordinate radius:[range doubleValue] identifier:station.name];
[self.locationManager startMonitoringForRegion:geofence desiredAccuracy:kCLLocationAccuracyBest];
}
有人知道如何在更近的边界上接收通知吗?任何帮助都将不胜感激。
谢谢Hamtho
这样大小的区域是不可能的。定位事件主要由设备周围的Wifi触发。除非绝对必要,否则GPS不会真正使用。因此,5000万以下的地区真的很糟糕。我已经和CoreLocation的工程师讨论过这一点(以及围绕区域监控的其他一些奇怪行为),由于对Wifi的依赖,不建议尺寸太小。他们实际上建议1.5亿美元,尽管没有记录在案。
如果你真的需要细粒度的位置更新,你可能需要自己进行检查或启动GPS以获得非常准确的读数。这伴随着电池电量的增加,所以你的里程数可能会有所不同。祝你好运