2

我有一个非常奇怪的行为。我正在编写一个同时使用 fetch 和 location 后台模式的应用程序(不知道这对问题很重要)。我用委托正确设置了 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 的方法?

提前致谢。

4

2 回答 2

2

您只能使用模拟器位置菜单中的“高速公路驾驶”选项来模拟模拟器上的显着变化的位置。它将以几分钟的间隔触发。

于 2014-01-20T11:19:41.630 回答
0

在主线程上分配管理器并检查管理器或应用程序是否始终具有权限可以解决问题。苹果的文档说明是:

注意:重大更改位置更新需要 kCLAuthorizationStatusAuthorizedAlways 的授权状态。

您可以使用以下方式检查状态:

CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

有可能

if (status != kCLAuthorizationStatusAuthorizedAlways)

您可以再次请求权限。

于 2016-01-20T20:00:45.307 回答