【发布时间】:2016-07-23 18:32:52
【问题描述】:
我有一个应用程序,用户可以在其中使用 gps 跟踪他的活动。
后台 GPS 更新一切正常,但在极少数情况下(千分之一),当我的应用程序处于后台时,我没有收到来自 CLLocationManager 的更新调用。不是马上,而是一段时间后。
我的应用开始接收更新,然后突然(可能是几分钟或几小时的跟踪)它就不再获得任何位置更新。一旦应用再次激活,它就会继续报告位置。当然,那些丢失的位置很糟糕!
我不知道它发生的时间和原因,这就是为什么我想问其他人是否已经遇到过同样的问题?我可以说这不是一个电话或类似的东西在打断。我也没有在 didFail 委托方法中得到回调。我只是什么都没有了...... 最大的问题是我不知道如何调试它,因为我无法故意重现它。
非常感谢任何帮助。
编辑:
这是我设置位置管理器的方法
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.distanceFilter = kMinimumDistanceFilter;
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
self.locationManager.pausesLocationUpdatesAutomatically = NO;
self.locationManager.activityType = CLActivityTypeFitness;
[self.locationManager requestWhenInUseAuthorization];
[self.locationManager requestAlwaysAuthorization];
if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)])
{
self.locationManager.allowsBackgroundLocationUpdates = YES;
}
然后在点击开始录制按钮时
[self.locationManager startUpdatingLocation];
编辑 2:
如果您启动此服务并且您的应用被暂停,系统将停止 事件的传递,直到您的应用程序再次开始运行(无论是在 前景或背景)。如果您的应用程序被终止,交付 的新位置事件完全停止。因此,如果您的应用需要 要在后台接收位置事件,它必须包括 其 Info.plist 中的 UIBackgroundModes 键(带有位置值) 文件。
我什至没有在后台 startUpdatingLocation... 但我的应用似乎就是这样。如果应用程序被暂停,我什至如何能够开始跟踪?那是不可能的,不是吗?原因暂停意味着它没有执行代码?!?
【问题讨论】:
-
你能显示你设置位置管理器的代码吗?你是在前台还是后台调用
startUpdatingLocation?您是否启用了重要位置监控? stackoverflow.com/questions/20187700/… -
我用一些代码更新了我的问题。谢谢帮助!
startUpdatingLocation在主线程和应用程序在前台时调用。我也不使用显着位置监控... -
如果您的应用重新启动,您是否再次正确设置了您的位置管理器(即位置键存在于传递给
didFi ishLaunchingWithOptions的字典中?) -
它存在于单例中。所以它只初始化了一次......
-
但这不会阻止我的追踪?!?因为我将
pausesLocationUpdatesAutomatically设置为否。我现在正试图尽可能地减少能源影响。也许这有帮助......
标签: ios gps cllocationmanager cllocation