我的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:为外景经理的方法,我有一个算法,首先会检查布尔isStopped是真的,如果是真的,那么它会检查新的位置的水平精度,并确保它是10岁以下。然后它将使用名为coords的位置对象检查newLocation,并检查它们是否相距大于9米。如果不是,它将再次停止位置更新并返回。如果它们是,它将继续另一个算法,它将根据某些参数检查新的位置对象。如果通过了COORDS位置对象将与新位置的对象,时间,时间2个整数将被设置为0设置,在isStopped将被设置为false,整个过程会从头再来。
简而言之,在没有位置更改5分钟后,位置更新将停止并每隔1分钟定期检查一次,以查看用户是否已从通过所有要求的先前位置移动了至少10米。当用户确实移动得足够远时,它会重新开始该过程,并且用户在开始定期检查之前不得移动10米或更多米5分钟。这背后的想法是,当用户没有移动太多而不是经常运行位置服务时,每分钟只进行几次秒检查。
现在这是我遇到的问题,当位置更新停止时。当应用程序在后台时,NSTimer停止运行。
我可以以某种方式安排后台任务在1分钟检查之间运行循环吗?有没有人有更好的想法?或者有关解决方案的任何想法?
答案 0 :(得分:1)
前段时间我问了一个问题,其中包含了在后台运行GPS的所有不同方法。
您必须执行特定操作才能在后台维护GPS。 NSTimer是不够的,因为您需要注册您的应用程序,以便在十分钟后让它在后台运行。您最低限度地必须在后台每10分钟运行一次GPS以保持您的应用程序正常运行。
无论如何,上述帖子中的方法应该回答你的问题。