Objective-C iPhone定期检查位置



我的iOS应用程序严重依赖GPS,我尝试编写一种有助于节省电池的方法,但我收效甚微。

我创建了一个每 15 秒触发一次的 NSTimer。每次调用该方法时,它都会将 int 时间增加 1。如果 int 时间达到 20(5 分钟),它将关闭位置更新并将布尔值设置为 true。每次方法运行并且 int 时间超过 20 时,它都会将另一个 int int time2 增加 1。如果运行该方法并且 int time2 等于 4,它将再次启动位置更新并将 time2 设置为 0。

然后在位置管理器的didUpdateLocation:方法中,我有一个算法,该算法将首先检查bool isStop是否为真,如果为真,那么它将检查新位置的水平精度并确保它低于10。然后,它将使用名为坐标的位置对象检查 newLocation,并检查它们之间的距离是否大于 9 米。如果不是,它将再次停止位置更新并返回。如果是,它将继续使用另一种算法,在那里它将根据某些参数检查新的位置对象。如果它通过,坐标位置对象将使用新的位置对象进行设置,时间和 time2 ints 将设置为 0,isStop 将设置为 false,整个过程将重新开始。

简而言之,在没有位置更改的 5 分钟后,位置更新将停止,并每 1 分钟定期检查一次,以查看用户是否从之前通过所有要求的位置移动了至少 10 米。当用户移动得足够远时,它会重新开始该过程,并且用户在开始定期检查之前必须 5 分钟内不要移动 10 米或更多米。这背后的想法是,当用户移动不多时,每分钟只做几秒的检查,而不是不断运行位置服务。

现在,当位置更新停止时,这是我遇到的问题。当应用在后台运行时,NSTimer 停止运行。

我可以以某种方式安排一个后台任务来运行 1 分钟检查之间的循环吗?有人有更好的主意吗?或者对此的解决方案有任何想法?

不久前,我问了一个问题,其中包含了在后台运行GPS的所有不同方法。

CLLocationManager geo-fencecing/startMonitoringForRegion: vs. startMonitoringForImportantLocationChanges: vs. 10 分钟开始更新呼叫

您必须执行特定操作才能在后台维护GPS。 NSTimer 是不够的,因为您需要注册您的应用程序才能在十分钟后保持其在后台运行。您至少必须在后台每 10 分钟运行一次 GPS,以保持您的应用程序运行。

无论如何,上面帖子中的方法应该可以回答您的问题。

最新更新