Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CLLocationManager地理围栏/StartMonitoring for Region:vs.StartMonitoring for SignificantLocationChanges:vs.10分钟StartDating电话_Iphone_Ios_Objective C_Core Location_Cllocationmanager - Fatal编程技术网

Iphone CLLocationManager地理围栏/StartMonitoring for Region:vs.StartMonitoring for SignificantLocationChanges:vs.10分钟StartDating电话

Iphone CLLocationManager地理围栏/StartMonitoring for Region:vs.StartMonitoring for SignificantLocationChanges:vs.10分钟StartDating电话,iphone,ios,objective-c,core-location,cllocationmanager,Iphone,Ios,Objective C,Core Location,Cllocationmanager,我正在尝试设置一个应用程序,该应用程序将能够在后台检查人们的位置,查看他们是否在给定位置,如果他们在,则向服务器发送ping。我们不想消耗用户的精力,所以我们正试图找出最佳解决方案 我已经做了大量的阅读,我还没有找到很多关于这些方法的信息。我现在就按照自己的理解来分析利弊 开始监测重大变化 描述:基于wi-fi和cell tower的关闭,系统会唤醒应用程序 : 一旦设备移动500米,应用程序就会收到通知 或比以前的通知更高。它不应该期待 通知频率高于每五分钟一次。如果 设备能够从网络、位置管理

我正在尝试设置一个应用程序,该应用程序将能够在后台检查人们的位置,查看他们是否在给定位置,如果他们在,则向服务器发送ping。我们不想消耗用户的精力,所以我们正试图找出最佳解决方案

我已经做了大量的阅读,我还没有找到很多关于这些方法的信息。我现在就按照自己的理解来分析利弊

开始监测重大变化

描述:基于wi-fi和cell tower的关闭,系统会唤醒应用程序

:

一旦设备移动500米,应用程序就会收到通知 或比以前的通知更高。它不应该期待 通知频率高于每五分钟一次。如果 设备能够从网络、位置管理器中检索数据 更有可能及时发送通知

优点:

  • 电池效率最高
缺点:

  • 取决于wi-fi/手机发射塔的变化
  • 只能假设每200m到2km调用一次(如果在某些区域不是更多)
  • 因此,不一致和不精确
或“n分钟更新”:

描述:这基本上要求应用程序有更多的时间,当额外的时间即将到期时,它会调用[self.locationManager startupdatating],获取位置并将后台线程再延长10分钟

优点:

  • 一致的
  • 可以像您希望的那样准确,也可以像您希望的那样始终如一 想要吗
缺点:

  • 必须每十分钟或更短的时间打一次电话,才能让应用程序在短时间内运行 背景(即呼叫数不能大于10)
问题: 这对电池有什么影响?唤醒GPS并将其关闭是否会对电池造成更大伤害?我无法想象在后台运行一个简短的位置检查会耗尽那么多电池。。。但话说回来,我不知道是什么让GPS通电并获得可用的信号

开始监测区域(地理围栏):

简单地说,当你进入一个预定义的区域时,你的应用程序会被唤醒。这是其中的一个奇怪之处,它比较新,而且关于它的文档也较少。我找不到一个关于“系统监控”过境的好描述。据我所知,这是一种非常聪明的算法,或者他们不断地对GPS进行ping操作,这会使它的效率低于其他方法

优点:

  • 简单实现
  • 由系统管理,因此您不必发明自己的特殊地理围栏,只需在边界过境时触发。。。没有不必要的数据,只需扔掉电池就可以了
  • 因此,对于这类事情,应该是最好的、准确的、由系统管理的
缺点:

  • 关于它是否有利于电池寿命,或者是否 耗尽电池的寿命
  • 系统是如何监控的
  • 基本上,不确定的行为
我想我的问题可以归结为startMonitoringForRegion:在电池寿命、一致性和精度方面如何与其他在后台测试用户位置的方法进行比较。有人彻底测试过这个吗?或者在他们的应用程序中使用它并获得至少一些反馈?就我的目的而言,可能需要在地理围栏和10分钟更新方法之间进行权衡。(同时考虑到苹果公开表示iOS7会有一些背景任务……这会改变这两种方法之间的权衡吗?)


非常感谢!期待着看看我们是否能找到比较这些方法的方法。

我已经用GPS跟踪车辆两年了。通过艰苦的方式学到了很多。。。根据我的经验,区域或地理围栏的StartMonitoring取决于小区更改事件,只有在发生小区/wifi更改事件时,才会触发didEnter或didExit事件。因此,这与w.r.t电池消耗没有任何区别。然而,它会进行额外的计算,这取决于当前被监控的区域数量。即使是苹果的提醒应用程序也不能为基于位置的提醒提供良好的效果,因为它使用了地理围栏

另一种方法是在每m分钟后启动GPS n分钟,这是一个很好的选择,如果操作得当,不应影响电池寿命。电池的确切作用是在高精度模式下持续激活GPS。例如,如果您使用kCLLocationAccuracyBest和distance filter=0启用GPS,您可以观察电池电量耗尽情况,很快您的设备也会变得越来越热

如果我是你,我会使用kCLLocationAccuracyBest(或者可能是kCLLocationAccuracyNearestTenMeters,如果精度不是那么重要的话)和距离过滤器=5(米),每10分钟激活一次GPS,持续5秒。在这种情况下,电池消耗将不明显。您可以使用类似的设置来解决您的具体情况,并最终找出最适合您的设置


顺便说一句:iPhone使用AGPS,A-GPS还使用网络资源在恶劣信号条件下定位和使用卫星。因此,当您进行startUpdatingLocation时,它还将使用附近的信号塔信息。请参见

+1以获得简洁的概述非常感谢您提供了一个非常全面和有用的答案!我如何在我的应用程序中安装地理围栏对于iOS来说是全新的请检查此问题并