以下是我尝试执行的操作。我的应用程序应该在您花费一定时间在一个区域(5-10分钟)之后发出通知。
我使用了CLLocationManager和区域监控,但它不够准确。基本上它会在didEnterRegion上发送一个事件,但即使我将区域半径设置为15米,实际半径更像是100到200米。
我找到的解决方法是让应用程序在后台运行并每分钟获取一次位置更新(didUpdateLocations)并使用它来检查用户是否在该区域。这很大程度上受到https://github.com/voyage11/Location/tree/master/Location的启发。它实际上非常适合我想要做的事情。
问题是:它只适用于应用程序处于后台但未被杀死的情况,并且由于我无法解释的原因,它会在2到7小时后停止运行。
我的想法是在用户进入某个区域时开始跟踪位置。因此,当我进入一个区域时,应用程序唤醒并调用didEnterRegion并启动后台任务(它实际上是一个后台任务管理器,每分钟重新启动一个新的后台任务 - 请参阅上面提到的代码中的github)和位置更新。这可以工作,但3分钟后,应用程序崩溃了,如
allowedBackgroundDuration:180.000000 reason:finishTask preventSuspend preventIdleSleep preventSuspendOnSleep
我希望它至少运行10分钟。或者我想保持背景跟踪活着,即使应用程序被杀死(例如Moves应用程序)。
有什么想法吗?
提前致谢!
PS:我当然允许在后台模式下进行位置更新;)