2

我需要在特定时间在后台跟踪用户的位置。后台任务可以在例如晚上 7 点到 11 点开始吗?

到目前为止,我能够实现这一目标的唯一方法是让后台任务持续运行,这似乎是一种不好的方法,因为它会大量消耗电池电量。

我已经设置了 CLLocation 管理器的精度和距离过滤器,以在这些时间之外节省电池:

[locationManager setDesiredAccuracy:kCLLocationAccuracyThreeKilometers];
[locationManager setDistanceFilter:2000.0f];

然后我在晚上 7 点到 11 点之间将其改回:

[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager setDistanceFilter:10.0f];

我已经关闭,locationManager.pausesLocationUpdatesAutomatically因为当用户保持静止 15-20 分钟时,这似乎会杀死后台任务 - 当用户再次移动时它不会恢复。

有没有更好的方法来减少这些时间之外的电池消耗。

另外,我认为 startMonitoringSignificantLocationChanges 仅在您移动超过 500m 时才进行位置更新是否正确 - 如果是这种情况,它在晚上 7 点至 11 点期间不够准确。

有任何想法吗?

4

1 回答 1

1

这是一个很常见的问题,不幸的是,简短的回答是您无法精确控制后台执行的时间和方式。

关于您的问题,如果startMonitoringSignificantLocationChanges仅在设备移动约 500 m 时进行更新也是正确的,请参阅文档,您可能已阅读:)

The significant-change location service delivers updates only when there has been a significant change in the device’s location, such as 500 meters or more.
于 2014-11-03T16:21:10.800 回答