我做了很多谷歌搜索,但没有找到符合我需要的任何解决方案。 所以我提出了自己的解决方案,但不确定它是否可行。 我需要监控20多个地区。因此,在第一次,我将开始监控当前用户的位置,并且我可以监控其他19个可用位置,比如说要监控的半径是100米。那么现在应该调用委托didEnterRegion吗?我真的不在乎这个。但是当用户从原始位置移动超过100米时,将调用委托didExitLocation,此时,我将更新要监视的新区域(通过向服务器发送新的当前用户位置,我将获得要监视的新区域列表),我仍然会监控这个新用户的位置,并且仍然可以监控其他19个区域。 这个解决方案可行吗?有人试过吗? 如果应用程序被暂停,并且它消耗大量电池,此解决方案是否仍然有效?
答案 0 :(得分:1)
这实际上是Apple的建议Core Location Programming Guide:
要解决此限制,请考虑仅注册这些区域 用户紧邻。随着用户位置的变化,您可以 删除现在更远的区域并添加区域 用户的路径。
然而,当在后台调用didEnterRegion:时,不清楚你得到多少时间,所以如果运行后台你是否有时间进行服务器调用还不清楚。 “重大变化的位置服务”信息说:
如果您让重要更改位置服务正在运行并且您正在运行 iOS应用程序随后被暂停或终止,该服务 新位置数据到达时自动唤醒您的应用。在 唤醒时间,应用程序被放入后台,你得到一个 少量时间(大约10秒)手动重启位置 服务和处理位置数据....因为你的应用程序在 背景,它必须做最小的工作和避免任何任务(如 查询网络)可能会阻止它在返回之前返回 分配时间到期。如果没有,您的应用将被终止。 如果iOS应用程序需要更多时间来处理位置数据,则可以 请求使用更多后台执行时间
beginBackgroundTaskWithName:expirationHandler:
方法 UIApplication类。
您可以尝试区域监控的组合,在didEnterEter区域中进行服务器调用,然后调用beginBackgroundTaskWithName:expirationHandler:
以确保您有足够的时间。但是,区域监控+服务器呼叫+后台处理的组合将会影响电池续航时间。
编辑:您还可以创建包含许多较小区域的大区域的“巨型区域”。当用户进入这些巨型区域时,设置并添加您感兴趣的所有较小区域,当它们退出时,将其删除。