应用程序处于后台状态时的CLLocationManager

时间:2012-05-21 20:02:08

标签: iphone objective-c ios ipad

我的问题是:CLLocationManager是否继续运行,而我的应用程序处于非活动状态?

4 个答案:

答案 0 :(得分:9)

是的,如果首先调用CLLocationManager startUpdatingLocation方法,并在AppName-Info.plist文件中添加Required Background Modes -> App registers for location updates

答案 1 :(得分:2)

是的,它可以。当您的应用暂停时,您有两种处理位置服务事件的选项,可以在以下文章中阅读:Getting the User’s Current Location。 如上所述:

  

您可以使用两种不同的服务来获取用户的当前位置:

     
      
  • 标准位置服务是一种可配置的通用解决方案,并且在所有版本的iOS中均受支持。
  •   
  • 重要变更位置服务为具有蜂窝无线电的设备提供低功率定位服务。此服务仅在iOS 4.0及更高版本中可用,并且还可以唤醒暂停或未运行的应用程序。
  •   

此外,如本文底部“在后台获取位置事件”部分所述:

  
      
  • 如果您的应用程序需要提供位置更新,无论应用程序是在前台还是后台,都有多种方法可以执行此操作。首选方案是使用重要位置更改服务在适当的时间唤醒您的应用程序以处理新事件。但是,如果您的应用程序需要使用标准位置服务,则可以将您的应用程序声明为需要后台位置服务。
  •   
  • 只有在缺少这些服务会影响其运营能力的情况下,申请才应申请后台服务。此外,任何请求后台位置服务的应用程序都应使用这些服务为用户提供切实的好处。例如,逐向导航应用程序可能是后台位置服务的候选者,因为它需要跟踪用户的位置并在下一次转弯时报告。
  •   

答案 2 :(得分:2)

这有一些重要的细微之处(从iOS 7.1开始):

  • 如果您只是在寻找重大变化和区域进入/退出事件,则不应使用位置更新后台模式。即使未设置背景标志,您仍会收到这些事件,并且您将同时节省大量电池。
  • 如果您执行上述操作,则需要注意有限的允许后台时间。如果您在允许的时间内不小心包装网络请求等,则会导致网络事务失败。
  • 如果您需要使用详细的位置跟踪(例如-startUpdatingLocation),您应该只使用位置背景模式,在这种情况下,此后台模式会让您的应用程序保持清醒状态。
  • 在未获取详细位置时使用位置后台模式会让用户感到不满,并可能会在审核过程中拒绝您的应用(具体取决于您在整个应用中的使用位置)。
  • 如果您没有设置后台位置模式,操作系统可能会随时终止您的应用,因此您需要确保在applicationDidFinishLaunching或applicationWillFinishLaunching中正确重新初始化CLLocationManager实例,以便获取后续的updateLocation或didEnter / ExitRegion委托调用。只是因为位置通过位置更新唤醒了您的应用程序,它不会在您编程的情况下神奇地重新创建您的CLLocationManager!

希望有所帮助!

答案 3 :(得分:1)

要在应用处于后台模式时禁用CLLocationManager,您只需添加即可 “应用程序注册位置更新” 在里面 “所需的背景模式” info.plist文件的密钥。

我建议尽可能使用重要更改位置服务而不是标准位置服务,以保留设备电池。