0

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

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

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

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

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

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

4

1 回答 1

1

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

CLLocationManager 地理围栏/startMonitoringForRegion:与 startMonitoringForSignificantLocationChanges:与 10 分钟 startUpdating 通话

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

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

于 2013-09-15T01:33:16.160 回答