iOS区域监控,监控20多个位置

时间:2015-01-26 16:07:27

标签: ios gps location monitoring region

我做了很多谷歌搜索,但没有找到符合我需要的任何解决方案。 所以我提出了自己的解决方案,但不确定它是否可行。 我需要监控20多个地区。因此,在第一次,我将开始监控当前用户的位置,并且我可以监控其他19个可用位置,比如说要监控的半径是100米。那么现在应该调用委托didEnterRegion吗?我真的不在乎这个。但是当用户从原始位置移动超过100米时,将调用委托didExitLocation,此时,我将更新要监视的新区域(通过向服务器发送新的当前用户位置,我将获得要监视的新区域列表),我仍然会监控这个新用户的位置,并且仍然可以监控其他19个区域。 这个解决方案可行吗?有人试过吗? 如果应用程序被暂停,并且它消耗大量电池,此解决方案是否仍然有效?

1 个答案:

答案 0 :(得分:1)

这实际上是Apple的建议Core Location Programming Guide

  

要解决此限制,请考虑仅注册这些区域   用户紧邻。随着用户位置的变化,您可以   删除现在更远的区域并添加区域   用户的路径。

然而,当在后台调用didEnterRegion:时,不清楚你得到多少时间,所以如果运行后台你是否有时间进行服务器调用还不清楚。 “重大变化的位置服务”信息说:

  

如果您让重要更改位置服务正在运行并且您正在运行   iOS应用程序随后被暂停或终止,该服务   新位置数据到达时自动唤醒您的应用。在   唤醒时间,应用程序被放入后台,你得到一个   少量时间(大约10秒)手动重启位置   服务和处理位置数据....因为你的应用程序在   背景,它必须做最小的工作和避免任何任务(如   查询网络)可能会阻止它在返回之前返回   分配时间到期。如果没有,您的应用将被终止。   如果iOS应用程序需要更多时间来处理位置数据,则可以   请求使用更多后台执行时间   beginBackgroundTaskWithName:expirationHandler:方法   UIApplication类。

您可以尝试区域监控的组合,在didEnterEter区域中进行服务器调用,然后调用beginBackgroundTaskWithName:expirationHandler:以确保您有足够的时间。但是,区域监控+服务器呼叫+后台处理的组合将会影响电池续航时间。

编辑:您还可以创建包含许多较小区域的大区域的“巨型区域”。当用户进入这些巨型区域时,设置并添加您感兴趣的所有较小区域,当它们退出时,将其删除。