Region Monitoring issues in IOS

守給你的承諾、 提交于 2019-12-13 04:23:40

问题


I am developing region monitoring from 4-5 months, and it was working fine before. Before a week or ago when we tested the code on device having IOS 7.1, we found an issue:

  • when one registered region is detected, it never getting detected again until user move far from this region by distance 10Km, if user never crosses this range of 10Km, no Enter/Exit events will be called for that region. If user travels far distance 10 Km from the detected region, its Exit event will be called, and when user comes back near the registered region, Enter event will be fired then only.

Here is my code: - i made a singleton of Location Manager, and initializing it in Location Manager:

    if (locationManager == nil)
    {
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.distanceFilter = kCLDistanceFilterNone;
        locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
        if ([locationManager respondsToSelector:@selector(activityType)])
        {
            [locationManager setActivityType:CLActivityTypeFitness];
        }

        if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
        {
            [locationManager requestAlwaysAuthorization];
        }
    }
  • Then i get user's current location and send it to server, to get nearby geofence regions, and register them to be monitored as follows:

    - (void)startRegionMonitoring:(NSArray*)regions
    {
        [self unregisterRegionMonitoring];
    
        if ([Helper isValidForRegionMonitoring])
        {
            [locationManager setDelegate:self];
            int MAX_REGION = regions.count > 20 ? 20 : regions.count;
    
            for (int index=0; index<MAX_REGION; index++)
            {
                NSString *identifier = [NSString stringWithFormat:@"Identfier %d", index+1];
                CLLocationCoordinate2D centerCoordinate = CLLocationCoordinate2DMake([[[regions objectAtIndex:index] valueForKey:@"lat"] doubleValue],
                                                                             [[[regions objectAtIndex:index] valueForKey:@"lon"] doubleValue]);
    
                CLRegion *region = nil;
                double radius = 200.0;
    
                if ([Helper isIOS7])
                {
                    region = [[[CLCircularRegion alloc] initWithCenter:centerCoordinate
                                                        radius:radius
                                                    identifier:identifier] autorelease];
                }
                else
                {
                    region = [[[CLRegion alloc] initCircularRegionWithCenter:centerCoordinate
                                                              radius:radius
                                                          identifier:identifier] autorelease];
                }
                    [locationManager startMonitoringForRegion:region];
            }
        }
    }
    

I tried different values of "distanceFilter", "DesiredAccuracy", and also played with different values for radius of monitored regions to fix the bug. but it didn't work.

来源:https://stackoverflow.com/questions/25841870/region-monitoring-issues-in-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!