繁体   English   中英

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

[英]iOS region monitoring, to monitor more than 20 locations

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

这实际上是苹果公司的建议《 核心位置编程指南》

要解决此限制,请考虑仅注册用户附近的那些区域。 随着用户位置的更改,您可以删除距离更近的区域,并添加出现在用户路径上的区域。

但是,尚不清楚在后台调用didEnterRegion:时获得了多少时间,因此不清楚是否有时间在后台运行时进行服务器调用。 “重大更改位置服务”信息显示:

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

您可以尝试结合使用区域监视,在didEnterEter区域中进行服务器调用,然后调用beginBackgroundTaskWithName:expirationHandler:来确保有足够的时间。 但是,区域监视+服务器调用+后台处理的结合将影响电池寿命。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM