核心位置区域监控

时间:2011-01-30 20:11:04

标签: iphone objective-c ios4 cllocationmanager cllocation

有谁知道使用它的任何知识:

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy

我正在尝试将其实施到我的项目中,但是:

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

永远不会被召唤?

有没有人有任何示例代码或知道为什么会这样?

我的代码如下。我在自己的LocationManager类中创建了一个这样的方法:

 - (void) locationManagerStartMonitoringRegion:(CLRegion *)region withAccuracy:(CLLocationAccuracy)accuracy {
    NSLog(@"Start Monitoring");
    [locationManager startMonitoringForRegion:region desiredAccuracy:accuracy];
    NSLog(@"Monitored Regions: %i", [[locationManager monitoredRegions] count]);
}

然后我这样称呼它:

CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(51.116261, -0.853758);     
CLRegion *grRegion = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:150 identifier:[NSString stringWithFormat:@"grRegion%i", value]];

[locationManager locationManagerStartMonitoringRegion:grRegion withAccuracy:kCLLocationAccuracyBest];

我得到了NSLog:

  

2011-01-30 19:52:26.409 TestingLocation [10858:307]开始监控

     

2011-01-30 19:52:27.103 TestingLocation [10858:307]受监控区域:

但永远不会从NSLog获得:

 - (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region     {
    NSLog(@"Entered Region");
}

 - (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
    NSLog(@"monitoringDidFailForRegion: %@",error);
}

由于

5 个答案:

答案 0 :(得分:5)

您需要为区域监控工作提供相当长的工作。它目前的粒度似乎是基于它从一个蜂窝塔传递到另一个蜂窝塔的时间 - 在我的测试中,我不得不移动一英里或更长时间来注册我已经确定离开了我设置的一个小区域。 / p>

答案 1 :(得分:1)

ios 5中的准确度有所提高。

答案 2 :(得分:1)

答案是:

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy
在ios 6.o中已弃用。而是使用` - (void)startMonitoringForRegion:(CLRegion *)region。

谢谢, Abdul`

答案 3 :(得分:1)

您可以监控多个区域并在Xcode中模拟位置(从调试器上方的面板中)来检查它是否正常工作。我已经过测试,效果很好。

答案 4 :(得分:0)

我必须看看你设置locationManager实例的位置。但是当@Mark Adams试图逃避时,你需要将当前的类设置为locationManager的委托,以便它知道将消息发送回哪个类。它很简单:

locationManager.delegate = self;