Objective-C iPhone 定期检查位置
Posted
技术标签:
【中文标题】Objective-C iPhone 定期检查位置【英文标题】:Objective-C iPhone check location periodically 【发布时间】:2013-09-15 01:25:06 【问题描述】:我的 ios 应用程序严重依赖 GPS,我尝试编写一种有助于节省电池的方法,但收效甚微。
我创建了一个每 15 秒触发一次的 NSTimer。每次调用该方法时,它会将 int 时间增加 1。如果 int 时间达到 20(5 分钟),它将关闭位置更新并将 bool isStopped 设置为 true。每次运行该方法并且 int time 大于 20 时,它都会将另一个 int,int time2 增加 1。如果运行该方法并且 int time2 等于 4,它将再次开始位置更新并将 time2 设置为 0 .
然后在位置管理器的 didUpdateLocation: 方法中,我有一个算法,它首先检查 bool isStopped 是否为真,如果为真,它将检查新位置的水平精度并确保它低于 10。然后它会使用名为 coords 的位置对象检查 newLocation,并检查它们之间的距离是否大于 9 米。如果不是,它将再次停止位置更新并返回。如果是,它将继续使用另一种算法,根据某些参数检查新的位置对象。如果它通过了坐标位置对象将被设置为新的位置对象,时间和时间2整数将被设置为0,isStopped将被设置为false,整个过程将重新开始。
简而言之,在 5 分钟没有位置更改后,位置更新将停止,并每 1 分钟定期检查一次,以查看用户是否已从满足所有要求的上一个位置移动了至少 10 米。当用户移动得足够远时,它会重新开始该过程,并且用户必须在 5 分钟内不移动 10 米或更多米,然后才能开始定期检查。这背后的想法是,当用户移动不多时,每分钟只进行几秒钟的检查,而不是让定位服务不断运行。
现在这是我遇到的问题,当位置更新停止时。当应用在后台时,NSTimer 停止运行。
我能否以某种方式安排后台任务在 1 分钟检查之间运行循环?有没有人有更好的想法?或者对此有任何解决方案的想法?
【问题讨论】:
【参考方案1】:不久前,我问了一个问题,其中介绍了在后台运行 GPS 的所有不同方式。
CLLocationManager geo-fencing/startMonitoringForRegion: vs. startMonitoringForSignificantLocationChanges: vs. 10-minute startUpdating calls
您必须执行特定的操作才能在后台保持 GPS。 NSTimer 是不够的,因为您需要注册您的应用程序才能在十分钟后使其在后台运行。您至少需要在后台每 10 分钟运行一次 GPS 以保持应用运行。
无论如何,上述帖子中的方法应该可以回答您的问题。
【讨论】:
以上是关于Objective-C iPhone 定期检查位置的主要内容,如果未能解决你的问题,请参考以下文章