CLLocationManager在一段时间后没有调用didUpdateToLocation方法

4
我正在尝试记录用户的位置随时间变化。如果用户在移动,它可以正常工作并可靠地调用委托方法didUpdateToLocation。然而,如果用户静止不动且应用程序在后台运行一段时间后,委托方法将不再被调用。要重新启动它,需要将应用程序带到前台。一旦活动状态恢复,委托方法又会可靠地被调用。
我最初认为这可能是因为CLLocationManager对象在ViewController中声明,所以我将其更改为在AppDelegate中声明,但也没有帮助。
我还尝试了distanceFilter属性,但无济于事。我目前正在使用以下代码从View controller中设置它。请注意,对象本身在AppDelegate对象中声明和初始化。
 app.locationManager.delegate = self;
    app.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    app.locationManager.distanceFilter = kCLDistanceFilterNone;
    [app.locationManager startUpdatingLocation];

有其他人遇到过这个问题吗?任何指针都将不胜感激。我已经为此苦苦挣扎了几天。

4个回答

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");
    }
}

同时在Schemes中编辑设置: Scheme/Edit Scheme/Options/允许位置模拟已勾选,但没有设置默认位置。


5

这听起来很有前途。我稍后会尝试一下并相应地更新帖子。 - Bharat Ahluwalia

4

你需要在应用程序的plist文件中添加UIBackgroundModes位置。


同意。请参阅 iOS 应用程序编程指南 中的 UIBackgroundModes 和应用程序状态与多任务处理。 - Rob
我应该表达得更清楚。我已经做过了。它在用户移动时很好地在后台工作。一旦用户停止移动并停留在一个地方一段时间,那么委托就不再被调用。 - Bharat Ahluwalia

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接