一段时间后没有调用CLLocationManager didUpdateToLocation

时间:2013-01-24 14:02:52

标签: iphone ios cllocationmanager

我正在尝试记录一段时间内的用户位置。如果用户在移动中它工作正常并且可靠地调用委托方法didUpdateToLocation。但是如果用户是静止的并且应用程序在后台运行,那么在一段时间之后,不再调用委托方法。要重新启动它,应用程序需要被收购到前台。一旦它处于活动状态,就会再次可靠地调用委托方法。

我最初认为这可能是因为CLLocationManager对象是在ViewController中声明的,因此我将其更改为在AppDelegate中声明,但这也没有帮助。

我也尝试过distanceFilter属性无济于事。我目前正在使用View控制器中的以下代码进行设置。请注意,对象本身在AppDelegate对象中声明并初始化。

 app.locationManager.delegate = self;
    app.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    app.locationManager.distanceFilter = kCLDistanceFilterNone;
    [app.locationManager startUpdatingLocation];

还有其他人遇到过这个问题吗?任何指针将不胜感激。我几天来一直在努力解决这个问题。

4 个答案:

答案 0 :(得分:5)

iOS 6自动引入了CLLocationManager属性pausesLocationUpdates。设置CLLocationManager时需要将其设置为NO,如下所述:http://www.stackoverflow.com/a/12781634/700769

答案 1 :(得分:5)

在UpdateLocation方法

中添加此代码
- (void) updateLocation{
    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    if ([CLLocationManager locationServicesEnabled]) {
        [locationManager startUpdatingLocation];       
    } else {
        NSLog(@"Location services is not enabled");
    }
}

还可以编辑方案中的设置:方案/编辑方案/选项/允许位置模拟已选中,但没有设置默认位置。

答案 2 :(得分:4)

您需要在app plist文件的UIBackgroundModes中添加位置。

答案 3 :(得分:1)

if #available(iOS 9.0, *){
    locationManager.allowsBackgroundLocationUpdates = true;
}