【发布时间】:2015-01-23 19:26:08
【问题描述】:
我想在后台跟踪时获得蓝条,但不是。
我的应用程序在活动时一直使用定位服务,所以在 iOS8 中我使用 CLLocationManager 上的 requestWhenInUseAuthorization。通常,当您关闭应用程序时,应用程序会停止跟踪您的位置,但用户可以选择让应用程序在后台跟踪他的位置的选项。因此,我在 Info.plist 文件中有UIBackgroundModes 的location 选项。这非常有效:当切换到后台时,应用程序会不断获取位置更新,并且会出现一个蓝条,提醒应用程序正在使用位置服务。一切都很完美。
但问题是,当用户没有选择在后台跟踪时,蓝条也会出现。在这种情况下,我只需在进入后台时停止来自 AppDelegate 的位置更新:
- (void) applicationDidEnterBackground:(UIApplication *)application
{
if (!trackingInBackground) {
[theLocationManager stopUpdatingLocation];
}
}
蓝条在关闭应用程序后仅显示一秒钟,但看起来仍然很烦人。
我知道使用requestAlwaysAuthorization 而不是requestWhenInUseAuthorization 可以解决问题,但是我根本不会看到任何蓝条,在后台跟踪实际打开时也不会。
我已经在applicationWillResignActive: 方法中尝试过stopUpdatingLocation,但这没有区别。
有谁知道在后台跟踪时如何获得蓝条,但不知道时不知道?
【问题讨论】:
-
我已经为这个错误提交了一个雷达openradar.me/20764660
-
Google 地图应用在后台运行时会执行相同的操作。我有一种强烈的感觉,这是一个 iOS 错误...
-
您是否尝试将代码移至
applicationWillEnterForeground?
标签: ios objective-c core-location