应用程序终止/暂停时的后台用户位置

时间:2015-03-01 06:42:26

标签: ios objective-c cllocationmanager

我一直试图弄清楚如何在应用程序终止时获取用户的位置,就像应用程序Moves一样。我知道这样做的唯一方法是使用重要的位置更改。但是,如果位置发生重大变化,应用程序每隔500米就会被唤醒,并且只有在最后一次更新后大约5分钟才会被唤醒。

根据Apple的说法:

  

只要设备从之前的通知移动500米或更长时间,应用就会收到通知。它不应该比每五分钟更频繁地预期通知。如果设备能够从网络中检索数据,则位置管理员更有可能及时发送通知。

在Moves应用程序中,即使应用程序终止,它也能够非常准确地检索用户的位置,而不会耗费太多电池。它似乎也没有打开背景位置,因为它在电池使用列表中的原因仅显示“背景活动”。所以我想知道像Moves这样的应用程序是如何做到这一点的。任何帮助都会很棒!感谢。

6 个答案:

答案 0 :(得分:4)

您可以注册500米区域内的区域,并在其中注册通知区域通知。如果它们达到一个,您的应用程序将在后台启动。然后,重新注册新的位置,将该位置保持在中心位置。

enter image description here

来自Apple's Documentation

  

系统可以重新启动支持后台执行的应用程序来处理传入事件。如果某个应用因用户强行退出而导致其终止,系统会在发生以下任一事件时启动该应用:

     

对于位置信息应用:

     
      
  • 系统会收到符合应用程序配置的投放条件的位置更新。

  •   
  • 设备进入或退出注册区域。 (区域可以是地理区域或iBeacon区域。)

  •   

答案 1 :(得分:3)

如果您经常需要更新位置但仍希望节省电池寿命,请尝试此操作 -

  1. 添加在后台使用位置所需的权限。
  2. 使用startUpdatingLocation
  3. 开始更新
  4. 使用allowDeferredLocationUpdatesUntilTraveled:timeout:在后​​台开始延迟更新在此方法中指定时间和距离过滤器。
  5. 请务必阅读文档here并正确指定所有属性以使其正常运行。

答案 2 :(得分:2)

唯一的解决方案是使用CoreLocation的后台模式。如果您的应用需要iOS 8,系统将重新启动您的应用,即使用户强制退出也是如此。这在Apple Docs

中有记录
  

在大多数情况下,系统在强制使用后不会重新启动应用   退出用户。一个例外是位置应用程序,在iOS 8和iOS中   之后被用户强制退出后重新启动。其他   但是,用户必须明确启动应用程序或重新启动应用程序   应用程序之前的设备可以自动启动进入   系统背景。

答案 3 :(得分:1)

在iOS 8中,它们是我们需要注意的新步骤,以便使位置获取工作。第一步是根据应用程序的主要功能将一个或两个键添加到项目的.plist中。这两个键是NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription,然后您需要添加一个String,向用户解释为什么应用程序需要访问他的位置,“此应用程序使用位置在后台/前台因为A, B和C“。这些字符串中的每一个都有一个相应的授权方法,需要调用,即InInUse或Alway(即背景)。

{{1}}

答案 4 :(得分:0)

根据我目前的经验,您有3个选项可以完成这项工作。第一个是发出无声通知,需要后端完成工作。静音通知是某种推送通知,但它会在没有警报的情况下通知您的应用。第二种解决方案是后台提取。后台提取不需要后端解决方案,但遗憾的是,您无法控制实例化它所需的时间间隔。第三个是没有消息的预定本地通知。

答案 5 :(得分:0)

来自文档

  

跟踪用户的位置

     

有几种方法可以在后台跟踪用户的位置,   其中大部分实际上并不需要您的应用程序连续运行   背景:

The significant-change location service (Recommended)

Foreground-only location services

Background location services

Background Execution

详细信息 - Getting the User’s Location