Core Location region monitoring

2019-01-31 15:39发布

Does anyone know any knowledge of using this:

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

I am trying to implement it into my project but:

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

is never being called?

Does anyone have any example code or know why this is happening?

My code is as follows. I created a method like this in my own LocationManager class:

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

I then call it like this:

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];

I get NSLog's of:

2011-01-30 19:52:26.409 TestingLocation[10858:307] Start Monitoring

2011-01-30 19:52:27.103 TestingLocation[10858:307] Monitored Regions:

But never get an NSLog from:

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

or

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

Thanks

5条回答
我欲成王,谁敢阻挡
2楼-- · 2019-01-31 15:41

Well you can monitor multiple regions and simulate location in Xcode (from the panel above the debugger) to check whether it's working or not. I've tested and it works pretty smooth.

查看更多
戒情不戒烟
3楼-- · 2019-01-31 15:48

The Accuracy is improved in ios 5.

查看更多
Evening l夕情丶
4楼-- · 2019-01-31 15:53

The Answer is :

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

is deprecated in ios 6.o. Instead use `- (void) startMonitoringForRegion:(CLRegion *)region.

Thanks, Abdul`

查看更多
等我变得足够好
5楼-- · 2019-01-31 15:59

You'll need to move rather a long way for the region-monitoring stuff to work. Its current granularity seems to be based on when it gets handed off from one cell tower to another—in my testing, I had to move a mile or more for it to register that I had definitively left a small region I'd set.

查看更多
小情绪 Triste *
6楼-- · 2019-01-31 16:00

I'd have to see where you setup your locationManager instance. But as @Mark Adams is trying to elude to, you need to set your current class as the delegate for locationManager so it knows which class to send messages back to. It is as simple as:

locationManager.delegate = self;

查看更多
登录 后发表回答