5

我有一个应用程序调用[locationManager startUpdatingLocation]并且从不调用[locationManager stopUpdatingLocation],因为 GPS 是在后台运行的。

我已将info.plist文件设置为允许应用注册后台位置更新。但我偶尔会注意到(当应用程序在后台运行时),屏幕右上角指示 GPS 已打开的小箭头会自行关闭。

有什么理由应该发生这种情况吗?

[locationManager startUpdatingLocation]只调用一次,在applicationDidBecomeActive方法中。我也应该在applicationDidEnterBackground方法中调用它吗?

4

2 回答 2

6

来自苹果文档:

允许位置管理器暂停更新可以在不牺牲位置数据的情况下延长目标设备的电池寿命。当此属性设置为 YES 时,位置管理器会在位置数据不太可能更改时暂停更新(并关闭适当的硬件)。例如,如果用户在使用导航应用时停下来吃东西,位置管理器可能会暂停更新一段时间。您可以通过为 activityType 属性分配值来帮助确定何时暂停位置更新。

iOS 6 中关于核心位置的变化。您需要禁用自动暂停。更改pausesLocationUpdatesAutomatically为 NO。即使应用程序在后台运行,也会发送位置更新,就像它过去在 < iOS 6 中工作一样。

http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

于 2013-05-31T20:16:31.920 回答
1

更新:您可以在后台使用标准更新。据苹果称:

如果您的应用需要在前台或后台提供位置更新,则有多种选择。首选选项是使用重大位置更改服务在适当的时间唤醒您的应用程序以处理新事件。但是,如果您的应用需要使用标准位置服务,您可以将您的应用声明为需要后台位置服务。

仅当缺少这些服务会影响其运行能力时,应用程序才应请求后台位置服务。此外,任何请求后台定位服务的应用程序都应该使用这些服务为用户提供切实的好处。例如,逐向导航应用程序可能是后台定位服务的候选者,因为它需要跟踪用户的位置并报告下一个转弯的时间。

看看这个链接:http: //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4


在后台运行的应用程序通常意味着使用[locationManager startMonitoringSignificantLocationChanges];而不是标准的[locationManager startUpdatingLocation];.

苹果在这个问题上有一些严格的指导方针。如果你还没有,你应该在这里真正阅读:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1

您的位置更新可能会停止,因为您在后台使用标准位置更新,而不是重大的位置更改。

于 2013-05-31T20:53:41.630 回答