startMonitoringSignificantLocationChanges但是过了一段时间后再也没有调用过更新位置
我有一种非常奇怪的行为。 我正在编写一个同时使用fetch和location background模式的应用程序(不知道它对于这个问题很重要)。 我使用委托正确设置了CLLocationManager,并开始监视AppDelegate中的重要位置更改( startMonitoringSignificantLocationChanges )。 我立刻得到了一个名为didUpdateLocations的函数,它给了我一些位置。 之后,即使我在Xcode中模拟不同的位置(也使用GPX文件),甚至停止并重新启动监控,也不会再触发事件。 我在后台和前台都没有收到任何位置。
奇怪的是,如果我开始更新位置(使用GPS),它可以正常工作(进行相同的测试……开始和停止与startMonitoringSignificantLocationChanges完全一样)。 显然我有didUpdateLocations和didFailWithError(我没有收到任何错误)。
这是我的初始化(通过在我的AppDelegate didFinishLaunchWithOptions中初始化对象来调用):
self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.pausesLocationUpdatesAutomatically = NO;
我知道distanceFilter和准确性对于重要的位置变化并不重要,我已经将pausesLocationUpdatesAutomatically设置为NO。
我错过了什么吗? 并且确实存在一种方法来读取一个位置是否来自wifi,蜂窝或gps?
提前致谢。
您可以使用模拟器位置菜单中的“高速公路驱动”选项模拟模拟器上重大更改的位置。 它将以几分钟的间隔触发。
在主线程上分配管理器,并检查管理器或应用程序是否始终具有权限。 Apple的文档说明是:
注意:重大更改位置更新需要授权状态为kCLAuthorizationStatusAuthorizedAlways。
您可以使用以下方式检查状态:
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
有可能
if (status != kCLAuthorizationStatusAuthorizedAlways)
您可以再次请求权限。