iOS:为什么停止监控区域后仍然显示概述的位置服务图标?

时间:2015-02-19 21:26:24

标签: ios cllocationmanager location-services

我正在测试iOS 7.1上的iPad第三代,因为我目前没有其他iOS设备。

我第一次运行我的应用时,会开始监控多个地区。状态栏和位置服务设置页面显示概述的位置服务图标(我的应用程序是列表中唯一具有轮廓图标的应用程序)。当我杀死我的应用程序时,图标仍然显示在两个地方,因为我还没有停止监控这些地区。在那之前一切都很好。

我的问题是,当我第二次运行我的应用程序时,我停止监控所有受监控的区域,但位置服务概述图标不会在状态栏和位置服务设置页面上消失...

这是我第一次运行时调用的代码:

- (void) getLocationManagerInstance {
    if (!self.locationManager) {
        self.locationManager = [CLLocationManager new];
    }
    self.locationManager.delegate = self;
}

- (void) startLocationGathering {
    if(self.shouldUpdateGPSLocations) {
        [self.locationManager startMonitoringSignificantLocationChanges];
    }
}

- (void) startMonitoringBeaconRegions {
    if(self.rootRegion) {
        [self.locationManager startMonitoringForRegion:self.rootRegion];
    }
    if (self.beaconRegions && self.beaconRegions.count < 20) {
        [self.beaconRegions enumerateObjectsUsingBlock:^(CLBeaconRegion* region, NSUInteger idx, BOOL *stop) {
            [self.locationManager startMonitoringForRegion:region];
        }];
    }
}

- (void) startMonitoringCircularRegions {
    if (self.gpsRegions && self.gpsRegions.count) {
        [self.gpsRegions enumerateObjectsUsingBlock:^(CLCircularRegion* region, NSUInteger idx, BOOL *stop) {
            [self.locationManager startMonitoringForRegion:region];
        }];
    }
}

我的代码在第二次运行时调用了:

- (void) getLocationManagerInstance {
    if (!self.locationManager) {
        self.locationManager = [CLLocationManager new];
    }
    self.locationManager.delegate = self;
}
- (void) locationManagerCleanup {
    [AWRUtils dlog:@"locationManagerCleanup"];
    NSArray* monitoredRegions = [self.locationManager monitoredRegions].allObjects;
    for (CLRegion* r in monitoredRegions) {
        [self.locationManager stopMonitoringForRegion:r];
    }
    NSArray* rangedRegions = [self.locationManager rangedRegions].allObjects;
    for (CLBeaconRegion* r in rangedRegions) {
        [self.locationManager stopRangingBeaconsInRegion:r];
    }
    [self.locationManager stopUpdatingLocation];
    [self.locationManager stopMonitoringSignificantLocationChanges];
}

如果我卸载了我的应用,概述的位置服务图标就会消失。但是,当我停止监控受监控区域时,为什么图标不会消失?


编辑:经过更多测试后,我发现第二次运行的CLLocationManager实例没有受监控的区域([self.locationManager monitoredRegions]返回 nil )...


编辑2:我还发现,如果在第二次运行时,我开始监控在第一次运行时开始监控的所有相同区域,然后我停止监控它们,概述的位置服务图标就会消失。这是正常行为吗?我在所有的互联网研究中都没有读到这一点......

0 个答案:

没有答案