CLLocationManager geo-fencing / startMonitoringForRegion:vs. startMonitoringForSignificantLocationChanges:与10分钟的startUpdating调用

我试图设置一个应用程序,可以在后台检查人员的位置,看他们是否在一个给定的位置,并发送ping一个服务器,如果他们是。 我们不想浪费用户的精力,所以我们试图找出最好的解决scheme。

我已经做了大量的阅读,我还没有find关于这些方法的很多信息。 我现在要理解他们的优点和缺点

startMonitoringForSignificantChanges

说明:基于wi-fi和手机信号塔的变化,系统唤醒应用程序。

文件 :

一旦设备从先前的通知移动500米或更远,应用程序就可以预期发出通知。 它不应该比每五分钟一次更频繁地发出通知。 如果设备能够从networking中检索数据,则位置pipe理者更可能及时地发送通知。

优点:

  • 电池效率最高

缺点:

  • 取决于Wi-Fi /蜂窝塔的变化
  • 只能假定这将被称为每200米至2公里(如果不是在某些地区更多)
  • 更多的准确性
  • 因此,不一致和不精确

10分钟的开始更新或“n分钟更新”:

说明:这基本上要求应用程序更多的时间,当额外的时间即将到期,它调用[self.locationManager startUpdating],抓住位置,并延伸了10多分钟的后台线程。

优点:

  • 一贯
  • 可以像你想要的一样准确,一如你所愿

缺点:

  • 必须每隔十分钟或更短时间进行一次通话,以保持应用程序在后台运行(即n不能超过10次)

问题:这对电池有什么影响? 唤醒GPS并closures它会伤害电池吗? 我无法想象在后台运行一个简单的位置检查会消耗很多的电池…但是,我不知道什么是开动GPS和获得一个有用的信号。

startMonitoringForRegion(地理围栏):

简而言之,当你进入一个预定义的区域时,你的应用程序会被唤醒。 这是他们的古怪,这是更新的,它有更less的文件。 我无法很好地描述“系统监控”界限。 对于我所知道的,这是一个非常聪明的algorithm,或者他们经常ping GPS,这样做比其他方法效率低。

优点:

  • 简单的实现
  • 由系统pipe理,所以你不必发明自己的临时地理围栏只有触发边界过境…没有不必要的数据,只是抛出换取电池命中
  • 因此,对于这类事情应该是最好的,准确的,由系统来pipe理

缺点:

  • 人们质疑其有效性
  • 巨大的矛盾是否对电池寿命有好处,或者是否会耗尽电池寿命。
  • 系统如何监控这个!
  • 基本上,不确定的行为。

我想我的问题归结为startMonitoringForRegion如何:与电池寿命,一致性和精确度的背景testing用户位置的这些其他方法相比。 有没有人彻底testing过这个? 或者在他们的应用程序中使用它,并至less得到一些反馈? 对我而言,可能的select是在地理围栏和10分钟的更新方法之间进行权衡。 (另外,苹果已经公开表示,iOS7将会有一些后台任务…这是否会改变这两种方法之间的权衡微积分?)有谁知道这两个比较?

非常感谢! 期待看到我们是否能够深入到如何比较这些方法。

我一直在使用GPS进行车辆跟踪2年。 学到了很多困难的方法…根据我的经验,startMonitoringForRegion或Geo-fencing取决于单元格更改事件,didEnter或didExit事件不会触发,直到出现cell / wifi更改事件。 所以对于电池消耗没有任何影响。 但是,它会进行额外的计算,这取决于当前正在监视的区域数量。 即使苹果的提醒应用程序也不会给基于位置的提醒带来好的结果,因为它使用了地理围栏。

另一种方法是在每m分钟后启动n分钟的GPS,这是一个不错的select,如果明智的话,不应该影响电池寿命。 高精度模式下恒定的GPS激活是什么影响电池。 例如,如果您使用kCLLocationAccuracyBest和distance-filter = 0启用GPS,则可以从字面上观察电池电量,并且很快您的设备也将开始变得越来越热。

如果我是你的话,我会用kCLLocationAccuracyBest(或者kCLLocationAccuracyNearestTenMeters使用更less的电池,如果精度不是那么重要)和distance-filter = 5(米)来每10分钟激活一次GPS。 在这种情况下的电池消耗将是不明显的。 你可以玩类似的设置,可以解决你的具体情况,并最终找出什么是最好的。

BTW:iPhone使用AGPS,A-GPS另外使用networking资源在信号不良的情况下定位和使用卫星。 所以,当你做startUpdatingLocation时,它也会使用附近的手机信息。 请参阅http://en.wikipedia.org/wiki/Assisted_GPS